gpt4 book ai didi

log4net adonetAppender 不会将空值插入数据库

转载 作者:行者123 更新时间:2023-12-04 02:50:58 26 4
gpt4 key购买 nike

我正在尝试使用 Log4Net 将异常记录到数据库中。我正在使用 adonetappender,它确实有效,但不是最佳状态。

如果我这样配置异常参数...

<parameter>
<parameterName value="@exception"/>
<dbType value="String"/>
<size value="-1"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%exception"/>
</layout>
</parameter>

它可以工作,但在没有异常时插入 ""而不是 null。

如果我这样做,我会得到相同的结果......

<parameter>
<parameterName value="@exception"/>
<dbType value="String"/>
<size value="-1"/>
<layout type="log4net.Layout.ExceptionLayout">
<!-- <key value="exception" /> -->
<!--<conversionPattern value="%exception"/>-->
</layout>
</parameter>

但是如果我有这样的

<parameter>
<parameterName value="@exception"/>
<dbType value="String"/>
<size value="-1"/>
<layout type="log4net.Layout.RawPropertyLayout">
<key value="exception" />
</layout>
</parameter>

它只插入空值......

问题可能来自于我们有一个总是调用的静态日志记录包装器

LogManager.GetLogger("[GoodLife.Common.Logging]").Debug(message, e); // e being null if there is no exception. 

当我在记录器上调用调试方法时,如果 e 为 null,有没有办法让它插入 null?

关于布局的 log4net 文档并不是那么有用,我从 Default values for AdoNetAppender parameter 得到了最后的配置。

最佳答案

问题是异常不是一个属性,因此 log4net 找不到任何带有键“exception”的东西,因此你总是得到 null。

为了解决您的问题,您可以像这样创建自己的布局转换器:

public class RawExceptionLayout : IRawLayout
{
public virtual object Format(LoggingEvent loggingEvent)
{
return loggingEvent.ExceptionObject;
}
}

关于log4net adonetAppender 不会将空值插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17752268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com