2012-04-04 43 views
23

Sử dụng log4net 1.2.11.0 w/.NET, làm thế nào tôi có thể nhận được RollingFileAppender xuất ngày UTC?Log4Net: Đăng nhập với thời gian UTC

Theo Apache nó phải được dễ dàng như:

<dateTimeStrategy type="log4net.Appender.RollingFileAppender+UniversalDateTime" /> 

Thật không may này không hoạt động.

Các toàn bộ cấu hình log4net của tôi là:

<log4net> 
    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
     <file value="Log-.txt" /> 
     <rollingStyle value="Date" /> 
     <datePattern value="yyyyMMdd"/> 
     <PreserveLogFileNameExtension value="true" /> 
     <staticLogFileName value="false"/> 
     <appendToFile value="true" /> 
     <maxSizeRollBackups value="10" /> 
     <dateTimeStrategy type="log4net.Appender.RollingFileAppender+UniversalDateTime" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date %-5level %logger - %message%newline" /> 
     </layout> 
    </appender> 
    <root> 
     <!-- Options are "ALL", "DEBUG", "INFO", "WARN", "ERROR", "FATAL" and "OFF". --> 
     <level value="DEBUG" /> 
     <appender-ref ref="RollingFile" /> 
    </root> 
    </log4net> 

Sử dụng một decompiler tôi có thể thấy rằng các dll log4net có kiểu 'UniversalDateTime' như là một lớp riêng bên trong RollingFileAppender.

Trả lời

28

Thay thế% date bằng% utcdate.

Ví dụ:

<conversionPattern value="%utcdate{ABSOLUTE} UTC %c{1} - %m%n" /> 

Trong ví dụ này, {ABSOLUTE} là một ngày format specifier: xem The Log4Net PatternLayout documentation để biết thêm.

Tôi nghi ngờ dateTimeStrategy có thể liên quan đến việc xác định nửa đêm (địa phương hoặc UTC) nào được sử dụng khi di chuyển theo ngày, nhưng tôi không chắc chắn về điều này.

+1

Đây chính xác là những gì tôi đang tìm kiếm để in ngày UTC. Và tôi nghĩ bạn đúng về dateTimeStrategy là ngày rollover của tệp. Có bên cạnh không có tài liệu về tài sản đó, nhưng kể từ khi bạn đề cập đến nó, có vẻ như chính xác. Cảm ơn bạn. –

31

Lưu ý rằng các thay đổi khác nhau nhiều khi sử dụng AdoNetAppender. Trong trường hợp đó, bạn cần phải thay đổi cài đặt thông số:

<parameter> 
    <parameterName value="@log_date" /> 
    <dbType value="DateTime" /> 
    <layout type="log4net.Layout.RawUtcTimeStampLayout" /> 
    <!--<layout type="log4net.Layout.RawTimeStampLayout" />--> 
</parameter> 

Thay đổi này giờ sẽ ghi giá trị UTC chính xác cho trường logDate.

+2

cảm ơn @Ed DeGagne, tôi yêu các giải pháp Sao chép/Dán! – Pingi

Các vấn đề liên quan