log4net adonetAppender赢得';t在数据库中插入空值
我正在尝试使用Log4Net将异常记录到数据库中。我正在使用adonetappender,它确实可以工作,但不是最理想的 如果我像这样配置异常参数log4net adonetAppender赢得';t在数据库中插入空值,log4net,log4net-configuration,log4net-appender,Log4net,Log4net Configuration,Log4net Appender,我正在尝试使用Log4Net将异常记录到数据库中。我正在使用adonetappender,它确实可以工作,但不是最理想的 如果我像这样配置异常参数 它可以工作,但在没有异常时插入“”而不是null 我得到同样的结果,如果我有这样的 但是如果我有这样的 它只插入空值 问题可能来自于我们有一个总是调用 LogManager.GetLogger(“[GoodLife.Common.Logging]”)。调试(消息,e);//如果没有异常,则e为空。 当我调用记录器上的调试方法时,如果e为
它可以工作,但在没有异常时插入“”而不是null
我得到同样的结果,如果我有这样的
但是如果我有这样的
它只插入空值
问题可能来自于我们有一个总是调用
LogManager.GetLogger(“[GoodLife.Common.Logging]”)。调试(消息,e);//如果没有异常,则e为空。
当我调用记录器上的调试方法时,如果e
为null,是否有办法让它插入null
布局上的log4net文档并没有多大帮助,我从获得了最后一个配置。问题是异常不是一个属性,因此log4net找不到任何带有键“exception”的内容,因此总是为null 为了解决您的问题,您可以创建自己的布局转换器,如下所示:
public类RawExceptionLayout:IRawLayout
{
公共虚拟对象格式(LoggingEvent LoggingEvent)
{
返回loggingEvent.ExceptionObject;
}
}
您还可以通过log4net修改使用的insert语句,并让sql server为您完成这项工作。这样做的好处是不需要更改代码
默认值:
和我的修改插入:
<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception])
VALUES (@log_date, @thread, @log_level, @logger, @message,
case when @exception <> '' then @exception else null end)" />
注意所需的
ExceptionObject
不为空,你必须返回一个字符串。谢谢
<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception])
VALUES (@log_date, @thread, @log_level, @logger, @message,
case when @exception <> '' then @exception else null end)" />