Jon*_*lis 38 .net c# logging log4net visual-studio-2010
我正在使用Log4Net 2.0,我根据需要工作,但是为特定的日志语句添加另一个记录器.所有日志记录都是针对单个文件追加器完成的.我想要做的更改是第三方应用程序触发包含调试/错误信息的事件,我可以捕获这些信息,虽然有用但我觉得它污染了正常的应用程序日志文件,而是宁愿将它存储在自己的日志中文件.
我想要的最终结果是一个名为log-file.txt
来自应用程序的所有日志记录的文件,除了第三方日志记录.并且第二个文件log-file-3rdparty.txt
仅使用第三方应用程序进行日志记录.我的问题是设置Log4Net有2个单独的记录器.我已经尝试创建第二个LogFileAppender并将其添加到root,但是所有这一切都将相同的日志记录语句放入两个记录器中.
在整个应用程序中,我们目前拥有GetLogger语句,如下所示.理想情况下,这需要保持不变,因此现有的日志记录不会改变.我需要一个不受此语句影响的新记录器,而是纯粹为第三方记录实例化.
private readonly 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=" [Application started] " />
<param name="Footer" value="[Application Finished] "/>
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
</ log4net>
Run Code Online (Sandbox Code Playgroud)
你能帮我吗?
编辑
如果它有任何区别.第三方日志事件捕获在同一个类中,我的一些应用程序日志事件也被触发,这是因为该类负责控制第三方软件.这是一个问题吗?我确实有一些想法,log4net可以区分基于类名创建的记录器,如果是这样的话,我是否需要重构第三方记录到自己的类?
Ste*_*gli 90
您可以轻松创建这样的特殊记录器:
ILog specialLogger = LogManager.GetLogger("SpecialLogger");
Run Code Online (Sandbox Code Playgroud)
然后,您可以将系统配置为使用此记录器的专用appender:
<logger name="SpecialLogger" additivity="false">
<level value="ALL" />
<appender-ref ref="SpecialLogFileAppender" />
</logger>
<root>
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
</root>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
25319 次 |
最近记录: |