首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为特定类配置Log4Net和越界错误处理

为特定类配置Log4Net和越界错误处理
EN

Stack Overflow用户
提问于 2019-05-14 22:21:10
回答 1查看 102关注 0票数 0

我在我的项目中使用Log4Net,并希望对其进行配置,以便将调试/信息消息发送到特定于每个类的文件,并将所有错误消息发送到中心文件。

在我的应用程序中,我有几个“worker”。我希望每个工人都有自己的日志文件来捕获调试消息。如果我收到的调试消息没有在特定的工作进程上捕获,我希望将其记录到中央调试文件中。我还希望有中央错误日志记录,其中来自任何工人的所有错误都记录在同一个文件中。

我很难弄清楚实现这一点的XML配置。下面是我最接近的例子:

代码语言:javascript
运行
复制
  <log4net>
    <appender name="DebugLog" type="log4net.Appender.RollingFileAppender">
      <file value="logs\debug.log" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="ddMMyyyy" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="DEBUG" />
        <levelMax value="FATAL" />
      </filter>
    </appender>
    <appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">
      <file value="logs\error.log" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="ddMMyyyy" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline%stacktrace{1}%newline" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="ERROR" />
        <levelMax value="FATAL" />
      </filter>
    </appender>
    <appender name="Worker1" type="log4net.Appender.RollingFileAppender">
      <file value="logs\Worker1.log" />
      <appendToFile value="true" />
      <rollingStyle value="Composite" />
      <datePattern value="ddMMyyyy" />
      <maxSizeRollBackups value="100" />
      <maximumFileSize value="100MB" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="DEBUG" />
        <levelMax value="INFO" />
      </filter>
    </appender>
    <appender name="Worker2" type="log4net.Appender.RollingFileAppender">
      <file value="logs\Worker2.log" />
      <appendToFile value="true" />
      <rollingStyle value="Composite" />
      <datePattern value="ddMMyyyy" />
      <maxSizeRollBackups value="100" />
      <maximumFileSize value="100MB" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="DEBUG" />
        <levelMax value="INFO" />
      </filter>
    </appender>
    <appender name="Worker3" type="log4net.Appender.RollingFileAppender">
      <file value="logs\3.log" />
      <appendToFile value="true" />
      <rollingStyle value="Composite" />
      <datePattern value="ddMMyyyy" />
      <maxSizeRollBackups value="100" />
      <maximumFileSize value="100MB" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="DEBUG" />
        <levelMax value="INFO" />
      </filter>
    </appender>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="DebugLog" />
      <appender-ref ref="ErrorLog" />
    </root>
    <logger name="Worker1">
      <level value='DEBUG'/>
      <appender-ref ref="Worker1" />
    </logger>
    <logger name="Worker2">
      <level value='DEBUG'/>
      <appender-ref ref="Worker2" />
    </logger>
    <logger name="Worker3">
      <level value='DEBUG'/>
      <appender-ref ref="Worker3" />
    </logger>
  </log4net>

我遇到的第一个问题是,所有写入Worker1的类的消息都被写入Debug.log文件和Worker1.log文件。如果它们已经写到了work1.log,我就不想把它们写到Debug.log。

我可以通过更改这个部分来解决这个问题,方法是添加additivity = false。在本例中,它写入work1.log,而不是Debug.log文件。

然而,这样做可以防止错误被写到Worker1.log发生的情况是,如果我设置了additivity = "false“并记录了一个错误,它会被写到Error.log中,但不会被写到Error.log中。

有没有办法让附加功能只应用于调试/信息消息,这样我就可以在debug.log文件中包含调试消息、错误消息和非特定于记录器的调试消息?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-15 00:54:13

您设置additivity="false"以将debug消息隔离到Worker1.log是正确的。

要将Worker1error消息返回到Error.log中,还必须在Worker1 logger声明中包括ErrorLog附加器,如下所示。

代码语言:javascript
运行
复制
<logger name="Worker1" additivity="false">
    <level value='DEBUG'/>
    <appender-ref ref="Worker1" />
    <appender-ref ref="ErrorLog" />
</logger>

通过此设置,您可以否决root中定义的规则,以便对debug消息使用自定义的Worker1 Appender,对error消息使用相同的Error Appender

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56132659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档