【问题标题】:log4net different appenders insert different tableslog4net 不同的 appender 插入不同的表
【发布时间】:2016-09-28 08:59:24
【问题描述】:

我的配置文件中有 2 个附加程序,配置为插入到不同的表中,“Log”和“LogFirms”,但不知何故,两个记录器都插入到两个表中。

<log4net debug="true">
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
      <bufferSize value="1" />  
      <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception],[ClientIp],[Username],[Controller],[Action],[Parameters]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception, @clientip, @username, @controller, @action, @parameters)" />
      ...
    </appender>
    <appender name="AdoNetAppenderForFirms" type="log4net.Appender.AdoNetAppender" additivity="false">
      <bufferSize value="1" />
      <commandText value="INSERT INTO LogFirms ([Date],[Thread],[Level],[Logger],[Message],[Exception],[ClientIp],[Username],[Controller],[Action],[Parameters]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception, @clientip, @username, @controller, @action, @parameters)" />
      ...
    </appender>
    <root>
      <level value="ALL" />
      <appender-ref ref="AdoNetAppender" />
      <appender-ref ref="AdoNetAppenderForFirms" />
    </root>
  </log4net>

这里是记录器类;

public static class Logger
    {
        private static ILog log { get; set; }
        private static ILog logFirms { get; set; }
        static Logger()
        {
            log = LogManager.GetLogger("AdoNetAppender");
            logFirms = LogManager.GetLogger("AdoNetAppenderForFirms");
        }
public static void Error(string controller, string action, string parameters, object msg, Exception ex)
        {
            if (controller == "AccountController" && logFirms.IsErrorEnabled)
            {
                logFirms.Error(msg, ex);
            }
            else if (log.IsErrorEnabled)
            {
                log.Error(msg, ex);
            }
        }

在控制器中没有看到错误,所以问题一定是在配置中...我搜索并尝试添加

additivity="false"

“AdoNetAppenderForFirms”元素的属性,但这没有改变。那么你有什么建议可以解决这个问题吗?

【问题讨论】:

  • 配置看起来不错。您不需要additivity,因为那是用于子记录器的,但您只定义了根。您可以在记录器类中放置一个断点并检查附加到每个记录器的 aenders,如果它们正常,则启用 log4net 内部调试并查看是否有任何线索。

标签: log4net


【解决方案1】:

您可以通过在配置中添加记录器而不是根级别的附加程序来做到这一点:

<root>
  <level value="ALL" />
</root>

<logger name="AdoNetAppender" additivity="false">
    <level value="ALL" />
    <appender-ref ref="AdoNetAppender" />
</logger>
<logger name="AdoNetAppenderForFirms" additivity="false">
    <level value="ALL" />
    <appender-ref ref="AdoNetAppenderForFirms" />
</logger>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多