如何解决NLog似乎在数据库中写入了不正确的值
我正在使用NLog登录数据库。在我看来,它在各栏中的价值错位。例如,它在Message列中写入StackTrace,在StackTrace列中写入异常信息
配置:
<nlog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" throwConfigExceptions="true" throwExceptions="true">
<targets>
<target name="database" type="Database" connectionString="Data Source=Server1;initial catalog=MyDb;Integrated Security=True;">
<commandText>insert into dbo.AppException ([Level],Logger,Message,Exception,StackTrace) values (@Level,@Logger,@Message,@Exception,@StackTrace);</commandText>
<parameter name="@Level" layout="${level}" />
<parameter name="@Logger" layout="${logger}" />
<parameter name="@Message" layout="${message}" />
<parameter name="@Exception" layout="${exception}" />
<parameter name="@StackTrace" layout="${stacktrace}" />
<dbProvider>System.Data.SqlClient</dbProvider>
</target>
</targets>
<rules>
<logger name="*" minlevel="Error" writeTo="database" />
</rules>
</nlog>
我的测试代码:
throw new IOException("This is my message");
登录代码:
logger.Error(ex);
下面是数据库中的示例行
我认为,“异常”字段中的值应写入“消息”列中,而“ StackTrace”的值应写入“异常”列中,最后“消息”的值应写入“ StackTrace”中
我的配置有什么问题吗?还是我的期望是错误的?
解决方法
我猜你正在记录这样的异常:
catch (Exception ex)
{
_logger.Error(ex); // ${message} will become ex.ToString(),since no message provided.
}
如果改为此:
catch (Exception ex)
{
_logger.Error(ex,"Exception caught while testing");
}
并将NLog.config
更新为此:
<parameter name="@Exception" layout="${exception:format=tostring,data}" />
那么您可能会得到想要的东西。
,阅读@Rolf发布的答案后,我发现我的nlog.config设置不正确。 nlog中的格式设置很重要
我将我的nlog更改为以下内容,并且按预期工作
<parameter name="@Message" layout="${exception:format=message}" />
<parameter name="@Exception" layout="${exception:format=type}" />
<parameter name="@StackTrace" layout="${exception:format=stacktrace}" />
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。