2008-10-28 6 views
20

Tôi cấu hình log4net sử dụng một RollingFileAppender hợp để các tập tin hiện luôn tên logfile.log và tất cả các file sau này được đặt tên logfile-YYYY.MM.dd.seq.log nơi seq là chuỗi nếu một nhật ký vượt quá một kích thước nhất định trong một ngày. Thật không may, tôi đã có rất ít thành công trong việc cấu hình một thiết lập như vậy.Làm cách nào để định cấu hình một RollingFileAppender để cuộn theo ngày và kích thước bằng log4net?

Edit:

cấu hình hiện tại của tôi được dán bên dưới. Nó đã được cập nhật dựa trên một số câu trả lời mà tôi đủ gần cho nhu cầu của tôi. Điều này tạo ra các file định dạng: logfile_YYYY.MM.dd.log.seq

<log4net> 

    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="RollingFileAppender" /> 
    </root> 

    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="logs\\logfile"/> 
     <staticLogFileName value="false"/> 
     <appendToFile value="true"/> 
     <rollingStyle value="Composite"/> 
     <datePattern value="_yyyy.MM.dd&quot;.log&quot;"/> 
     <maxSizeRollBackups value="10"/> 
     <maximumFileSize value="75KB"/> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/> 
     </layout> 
     <filter type="log4net.Filter.LevelRangeFilter"> 
      <param name="LevelMin" value="DEBUG" /> 
      <param name="LevelMax" value="FATAL" /> 
     </filter> 
    </appender> 

</log4net> 

Một lưu ý thú vị, thiết

<staticLogFileName value="false"/> 

true khiến logger để không viết bất kỳ tập tin.

Trả lời

13

Chúng tôi sử dụng sau đây (trong Log4J):

<appender name="roller" class="org.apache.log4j.DailyRollingFileAppender"> 
    <param name="File" value="Applog.log"/> 
    <param name="DatePattern" value="'.'yyyy-MM-dd"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="[slf5s.start]%d{DATE}[slf5s.DATE]%n%p[slf5s.PRIORITY]%n%x[slf5s.NDC]%n%t[slf5s.THREAD]%n%c[slf5s.CATEGORY]%n%l[slf5s.LOCATION]%n%m[slf5s.MESSAGE]%n%n"/> 
    </layout> 
</appender> 

này cho chúng ta Applog.log.yyyy-MM-dd file

+1

Theo tài liệu log4j: DailyRollingFileAppender đã được quan sát để hiển thị các vấn đề đồng bộ hóa và mất dữ liệu. Bạn đồng hành bổ sung log4j bao gồm các lựa chọn thay thế cần được xem xét cho các triển khai mới và được thảo luận trong tài liệu hướng dẫn cho org.apache.log4j.rolling.RollingFileAppender. –

4

Theo log4net RollingFileAppender mã nguồn:

protected string GetNextOutputFileName(string fileName) 
{ 
    if (!m_staticLogFileName) 
    { 
     fileName = fileName.Trim(); 

     if (m_rollDate) 
     { 
      fileName = fileName + m_now.ToString(m_datePattern, System.Globalization.DateTimeFormatInfo.InvariantInfo); 
     } 

     if (m_countDirection >= 0) 
     { 
      fileName = fileName + '.' + m_curSizeRollBackups; 
     } 
    } 

    return fileName; 
} 

Vì vậy, tôi đoán nó không thể tạo ra một tập tin đăng nhập với tên mà bạn cần. Tôi nghĩ rằng đó là một cái gì đó giống như logfileYYYY-MM-dd.n.log hoặc tương tự.

+0

@Ryan, Leandro: Nó cũng xuất hiện không có cách nào đơn giản để ghi đè hành vi này. 'GetNextOutputFileName' không phải là ảo và các phương thức khác gọi nó là biến riêng tư tham chiếu, vì vậy bạn không thể chỉ sao chép mã của chúng và thay thế cuộc gọi. Tôi nghĩ rằng tốt nhất bạn có thể làm là có một tên tập tin duy nhất mỗi lần, sử dụng một cái gì đó giống như tùy chọn mẫu ngày bạn đã kết thúc bằng cách sử dụng. –

0

Lưu ý rằng là trường hợp này

  <maxSizeRollBackups value="10"/> 

sẽ bị bỏ qua.

Xem answer này cho một câu hỏi tương tự log4net

1

Cố gắng thiết lập thuộc tính này là true:

giá trị preserveLogFileNameExtension = "true"

Tôi tin rằng thủ thuật này sẽ giúp bạn! Tuy nhiên, bảo lưu tài sảnLogFileNameExtension cần phiên bản mới nhất của log4net, bạn có thể tìm thấy phiên bản này tại đây: logging.apache.org/log4net/download.html