由于这里的用户,我最近来到了log4net。无论如何,我想将每个Console.Write()和Debug.Write()自动记录到我配置的单个日志文件中。另外,我使用了许多类库,这些类也有对log4net一无所知的Console / Debug语句。这些也可以根据配置自动记录到日志文件中吗?这有可能吗?
我想要记录滚动日志文件:
Console.WriteLine("console statement");
Debug.WriteLine("debug statement");
实例化记录器:
private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private static void InitializeLogger()
{
XmlConfigurator.Configure();
}
整个app.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="SubToolsPortServerTest.log"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="2" />
<maximumFileSize value="1MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/>
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
</configuration>
答案 0 :(得分:7)
您可以通过编写记录到log4net的自定义Debug.WriteLine
将Trace.WriteLine
(在调试版本中)和TraceListener
重定向到log4net。简单实现的显着位置如下所示:
public class Log4NetTraceListener : TraceListener
{
ILog _logger = ...;
public override void WriteLine(string message)
{
_logger.Info(message);
}
}
然后,您可以在应用程序配置文件中对此进行配置:
<system.diagnostics>
...
<listeners>
<add name="traceListener" type="MyNamespace.Log4NetTraceListener,MyAssembly" />
</listeners>
...
</system.diagnostics>
更完整的实现可能支持记录器名称的配置,要使用的日志记录级别,以及可能的一些内部缓冲消息。
对于Console.WriteLine
,您可以通过调用TextWriter
重定向到您自己的自定义Console.SetOut
,并且您的自定义TextWriter
可以登录到log4net。