对于 log4net,您是否指定要使用哪个附加程序?

发布于 2024-12-11 19:37:11 字数 197 浏览 0 评论 0原文

当您有 2 个附加程序时,例如一个用于调试错误,一个用于产品错误,在您的代码中,您是否显式创建 2 个日志类,或者附加程序基本上会写入满足特定条件的任何日志消息?

因此,在您的代码中,您使用单个日志方法,并且根据附加程序的设置方式,如果消息是从特定命名空间记录的,或者是特定日志级别的,它将记录消息。

那么单个日志条目可能会写入 2 个日志文件吗?

When you have 2 appenders, say one for debug errors and one for product errors, in your code, do you explicitly create 2 log classes or is an appender basically going to write any log messages that meet a certain criteria?

So in your code, you use a single log method, and depending on how your appenders are setup, it will log the message if it e.g. is logged from a specific namespace, or is a certain log level.

So its possible a single log entry is written to 2 log files?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

幽梦紫曦~ 2024-12-18 19:37:11

是的,您可以将单个日志语句发布到多个附加程序。只要它满足每个条件,它就会使用每个附加程序。

例如,采用此配置部分,它将所有消息记录到文件,并将警告和错误记录到事件查看器。

 <log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="c:\logs\MySite"/>
      <appendToFile value="true"/>
      <datePattern value=".yyyy-MM-dd.\l\o\g"/>
      <rollingStyle value="Date"/>
      <MaxSizeRollBackups value="14"/>
      <param name="StaticLogFileName" value="false"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%d{HH:mm:ss.fff} [%thread] %-5level %logger{1} - %m%n"/>
      </layout>
    </appender>
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
      <applicationName value="Trading.Web"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%d{HH:mm:ss.fff} [%thread] %-5level %logger{1} - %m%n"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="WARN"/>
        <param name="LevelMax" value="ERROR"/>
      </filter>
    </appender>
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="RollingFileAppender"/>
      <appender-ref ref="EventLogAppender" />
    </root>
  </log4net>

:因此:

  _log.Debug("This is a debug message");

只会出现在日志文件中(因为它不符合事件日志附加程序的过滤条件) 。

但这:

  _log.Error("This is an error message.");

将记录到日志文件和事件查看器。

更新:关于您的过滤问题,如果您有:

<root>
  <level value="DEBUG"/>
  <appender-ref ref="RollingFileAppender"/>
</root>

<!-- Print only messages of level WARN or above in the namespace Com.Foo -->
<logger name="Com.Foo">
    <level value="WARN" />
</logger>

那么 Com.Foo 下的所有内容将在 WARN 或更高级别记录,但其他所有内容将在 DEBUG 或更高级别记录......

Yes, you can have single log statements post to multiple appenders. As long as it meets the criteria for each, it will use each appender.

For example, take this config section, it logs all messages to file, and also logs warnings and errors to event viewer.:

 <log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="c:\logs\MySite"/>
      <appendToFile value="true"/>
      <datePattern value=".yyyy-MM-dd.\l\o\g"/>
      <rollingStyle value="Date"/>
      <MaxSizeRollBackups value="14"/>
      <param name="StaticLogFileName" value="false"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%d{HH:mm:ss.fff} [%thread] %-5level %logger{1} - %m%n"/>
      </layout>
    </appender>
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
      <applicationName value="Trading.Web"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%d{HH:mm:ss.fff} [%thread] %-5level %logger{1} - %m%n"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="WARN"/>
        <param name="LevelMax" value="ERROR"/>
      </filter>
    </appender>
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="RollingFileAppender"/>
      <appender-ref ref="EventLogAppender" />
    </root>
  </log4net>

So this:

  _log.Debug("This is a debug message");

Will only appear in the log file (because it doesn't meet the event log appender's filter criteria).

But this:

  _log.Error("This is an error message.");

Will log to both the log file and the event viewer.

UPDATE: On your filtering question, if you had:

<root>
  <level value="DEBUG"/>
  <appender-ref ref="RollingFileAppender"/>
</root>

<!-- Print only messages of level WARN or above in the namespace Com.Foo -->
<logger name="Com.Foo">
    <level value="WARN" />
</logger>

Then all things under Com.Foo will log if WARN or higher, but everything else would log at DEBUG or higher....

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文