将信息记录到不同的日志文件中

时间:2010-03-08 23:17:48

标签: log4net log4net-configuration

我的web.config文件中有以下配置,但如何在C#中将信息分别记录到data.txtgeneral.txt

有人可以为我提供一些示例代码吗?

<appender name="GeneralLog" type="log4net.Appender.RollingFileAppender">
  <file value="App_Data/Logs/general.txt" />
  <appendToFile value="true" />
  <maximumFileSize value="2MB" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="5" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n"  />
  </layout>
</appender>
<appender name="DataLog" type="log4net.Appender.RollingFileAppender">
  <file value="App_Data/Logs/data.txt" />
  <appendToFile value="true" />
  <maximumFileSize value="2MB" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="5" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n"  />
  </layout>
</appender>

1 个答案:

答案 0 :(得分:4)

在您的应用中,理想情况下,您应该使用不同的记录器以相同的方式记录常规和数据。在配置中,您可以选择如何将传入的日志消息“路由”到不同的appender。

首先是记录器本身。根据应用程序在类和命名空间方面的组织方式,您可以根据命名空间层次结构以分层方式组织记录器。然后,您可以在层次结构中使用不同的分支到不同的appender。阅读Level继承部分here

除记录器层次结构外,您还可以使用任何名称作为记录器名称。因此,对于应用的常规部分,您可以使用名为“general”的记录器。

您可以使用filters来控制日志消息流。您可以过滤记录器名称,级别,属性等消息,也可以实现自己的过滤器。

这是一个示例,展示如何使用logger元素和过滤器将常规和数据路由到appender。我们将根元素(接收所有日志消息)路由到数据追加器。在数据追加器中,我们过滤掉来自通用记录器的所有消息。

此外,我们将常规记录器路由到常规appender。

<appender name="GeneralLog" type="log4net.Appender.RollingFileAppender">
    ...
</appender>

<appender name="DataLog" type="log4net.Appender.RollingFileAppender">
    <filter type="log4net.Filter.LoggerMatchFilter">
        <loggerToMatch value="general" />
        <acceptOnMatch value="false" />
    </filter>
    ...
</appender>

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

<logger name="general">
    <level value="WARN" />
    <appender-ref ref="GeneralLog" />
</logger>