2013-05-30 38 views
7

Gần đây tôi đã truy cập log4net nhờ người dùng tại đây. Dù sao, tôi muốn đăng nhập mọi Console.Write() và Debug.Write() tự động vào tệp nhật ký duy nhất mà tôi đã định cấu hình. Ngoài ra, tôi sử dụng nhiều thư viện lớp cũng có các câu lệnh Console/Debug không biết gì về log4net. Những điều này cũng có thể được ghi vào tệp nhật ký tự động dựa trên cấu hình không? Có bất kỳ điều này có thể không?log4net Logging Debug.WriteLine và Console.WriteLine

Những gì tôi muốn ghi lại trong tập tin log cán:

Console.WriteLine("console statement"); 
Debug.WriteLine("debug statement"); 

nhanh chóng Logger:

private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 
private static void InitializeLogger() 
{ 
    XmlConfigurator.Configure(); 
} 

Toàn bộ 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> 

Trả lời

7

Bạn có thể chuyển hướng Debug.WriteLine (trong debug xây dựng) và Trace.WriteLine để log4net bằng cách viết một tùy chỉnh TraceListener ghi nhật ký thành log4net. Các bit nổi bật của một thực hiện đơn giản sẽ giống như thế:

public class Log4NetTraceListener : TraceListener 
{ 
    ILog _logger = ...; 

    public override void WriteLine(string message) 
    { 
     _logger.Info(message); 
    } 
} 

Sau đó, bạn sẽ cấu hình này trong ứng dụng tập tin cấu hình một cái gì đó của bạn như:

<system.diagnostics> 
    ... 
    <listeners> 
     <add name="traceListener" type="MyNamespace.Log4NetTraceListener,MyAssembly" /> 
    </listeners> 
    ... 
</system.diagnostics> 

Một thực hiện đầy đủ hơn có thể hỗ trợ cấu hình của tên logger , mức ghi nhật ký để sử dụng và có thể một số bộ đệm nội bộ của thư.

Đối với Console.WriteLine bạn có thể chuyển hướng đến tùy chỉnh của riêng mình TextWriter bằng cách gọi Console.SetOut và tùy chỉnh TextWriter của bạn có thể đăng nhập vào log4net.

+0

Joe, tôi chấp nhận câu trả lời của bạn vì câu trả lời cho câu hỏi của tôi về việc xuất Debug và Console.WriteLines tới log4net. Tuy nhiên, tôi đã tìm thấy nó dễ dàng hơn để thêm log4net vào từng dự án và thay đổi các câu lệnh debug. Cảm ơn bạn. – JMooney

+0

Bất kỳ ai cũng gặp phải những sự bế tắc làm việc này? – dmarlow