c# - Log4Net - 如何添加仅用于特定代码部分的第二个记录器

标签 c# .net visual-studio-2010 logging log4net

我正在使用 Log4Net 2.0,我让它按要求工作,但要为特定的日志语句添加另一个记录器。所有日志记录都完成到单个文件附加程序。我想做的改变是第 3 方应用程序触发包含调试/错误信息的事件,我可以捕获此信息,虽然有用但我觉得它会污染正常的应用程序日志文件,而是希望将其存储在自己的日志中文件。

我想要的最终结果是一个名为 log-file.txt 的文件,其中包含应用程序的所有日志记录(第 3 方日志记录除外)。还有一个名为 log-file-3rdparty.txt 的第二个文件,仅从第 3 方应用程序进行日志记录。我遇到的问题是将 Log4Net 设置为有 2 个独立的记录器。我已经尝试创建第二个 LogFileAppender 并将其添加到根目录,但是所有这些所做的都是将相同的日志语句放入两个记录器中。

在整个应用程序中,我们目前有如下 GetLogger 语句。理想情况下,这需要保持不变,因此现有的日志记录不会改变。我需要一个不受此声明影响的新记录器,而是纯粹为第 3 方记录实例化。

私有(private)只读 ILog _log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

App.Config 如下。

< log4net>
<logger name="MyApp.Logging">
  <level value="DEBUG"/>
</logger>

<root>
  <level value="ALL" />
  <appender-ref ref="LogFileAppender" />
</root>

<appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
  <param name="File" value="log-file.txt" />
  <param name="AppendToFile" value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <param name="Header" value="&#13;&#10;[Application started]&#13;&#10;" />
    <param name="Footer" value="[Application Finished]&#13;&#10;"/>
    <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
  </layout>
</appender>
</ log4net>

你能帮忙吗?

编辑

如果有什么不同。第 3 方日志事件在我的一些应用程序日志事件也被触发的同一个类中捕获,这是因为该类负责控制第 3 部分软件。这是一个问题吗?我确实知道 log4net 可以根据类名区分要创建的记录器,如果是这种情况,我是否需要将第 3 方日志记录重构到它自己的类?

最佳答案

您可以像这样轻松创建一个特殊的记录器:

ILog specialLogger = LogManager.GetLogger("SpecialLogger");

然后您可以将系统配置为为此记录器使用专用的附加程序:

<logger name="SpecialLogger" additivity="false">
   <level value="ALL" />
   <appender-ref ref="SpecialLogFileAppender" />
</logger>
<root>
   <level value="ALL" />
   <appender-ref ref="LogFileAppender" />
</root>

关于c# - Log4Net - 如何添加仅用于特定代码部分的第二个记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5154048/

相关文章:

c# - 为什么 WPF 中任何元素的 TabIndex 属性都是 2147483647?

c# - 寻找用于生成标准 PRBS 序列的*通用*算法

c# - 雅阁机器学习 knn.decide indexOutOfRangeException

.net - 存在哪些 ASP.Net 替代框架?

.net - 良好的工作流程基础示例

c++ - 使仿函数成为类成员函数时出现编译错误

vb.net - 如何获得偶数或奇数

c# - C# 中的文件系统观察器

c# - 当命名空间不明确时使用特定的类

c# - 为什么我们不能在 .Net 中创建静态类的实例