2011-11-03 19 views
6

Tôi muốn tạo tệp nhật ký có thể được cuộn vào đầu ngày hôm sau hoặc nếu tệp đạt đến kích thước tệp được chỉ định và tệp nhật ký phải được chứa trong thư mục ngày. Định dạng của thư mục là YYYYMMDD (/20111103/mylogfile.log)Làm cách nào để kiểm soát tệp nhật ký với kích thước tệp hàng ngày và kích thước tệp tối đa bằng log4j?

Có thể thực hiện điều này bằng Log4j mà không cần triển khai lớp tùy chỉnh không?

Bây giờ tôi đang sử dụng log4j và log4j-extra, Tôi đặt thuộc tính FileNamePattern như được định nghĩa trong API log4j để cuộn tệp hàng ngày và đặt kích thước tệp tối đa là 50 MB.

My log4j.xml là:

<appender name="MYAPPENDER" class="org.apache.log4j.rolling.RollingFileAppender"> 
    <param name="encoding" value="UTF-8" /> 
    <param name="append" value="true" /> 
    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy"> 
     <param name="FileNamePattern" value="${catalina.home}/logs/MY-APP/%d{yyyyMMdd}/MY-APP_%d{yyyyMMddHHmmss}.log" /> 
    </rollingPolicy> 
    <triggeringPolicy class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy"> 
     <param name="maxFileSize" value="50000000" /> 
    </triggeringPolicy> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="[%d{dd/MM/yyyy HH\:mm\:ss}] %-5p [%c.%M(),%4L] - %m%n" /> 
    </layout> 
</appender> 

Kết quả cài đặt ở trên là log file không được cuộn vào đầu ngày tới nhưng nếu kích thước tập tin đã đạt tới 50 MB, log file sẽ được triển khai.

Vui lòng trợ giúp tư vấn cho tôi. m (_ _) m

Trả lời

0

Từ RollingFileAppender documentation

Để được sử dụng bất kỳ, một trường hợp RollingFileAppender phải có cả một RollingPolicy và TriggeringPolicy thiết lập .... TimeBasedRollingPolicy đóng vai trò vừa là một RollingPolicy và a Kích hoạtPolicy.

Do đó, SizeBasedTriggeringPolicy của bạn bị bỏ qua vì TimeBasedRollingPolicy được định cấu hình ở trên. Cách duy nhất để đáp ứng yêu cầu của bạn sẽ là triển khai các lớp tùy chỉnh.

Ngoài ra, nếu kích thước tệp nhật ký thực sự quan trọng, bạn có thể xem xét sử dụng automatic gzip compression để loại bỏ SizeBasedTriggeringPolicy và chỉ có nhật ký cuộn mỗi ngày.

3

Để kích hoạt lăn hàng ngày: class = "org.apache.log4j.DailyRollingFileAppender"

Và để cho phép kích thước tập tin tối đa và số lượng các tập tin sao lưu

<param name="MaxFileSize" value="200MB" /> 
<param name="MaxBackupIndex" value="4" /> 

Nhưng bạn không thể đặt MaxFileSize với DailyRolling, vì vậy bạn có thể sử dụng công cụ cuộn tệp ứng dụng

Ví dụ:

<appender name="MAIN_FA" class="org.apache.log4j.RollingFileAppender"> 
    <param name="File" value="logs/main.log" /> 
    <param name="datePattern" value="'-'yyyy-MM-dd'.log'" /> 
    <param name="append" value="false" /> 
    <param name="Threshold" value="ALL" /> 
    <param name="MaxFileSize" value="200MB" /> 
    <param name="MaxBackupIndex" value="4" /> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d [%t] %-5p %C{6} (%F:%L) - %m%n" /> 
    </layout> 
</appender> 

Hoặc bạn có thể làm điều này http://wiki.apache.org/logging-log4j/DailyRollingFileAppender

6

công trình hàng ngày cho tôi với xml trong câu hỏi duy nhất chuyển đổi thành log4j.tính chất tương đương với cuộn qua sau 100KB (cho mục đích thử nghiệm):

# Root logger option 
log4j.rootLogger=INFO, file 

# Direct log messages to a file 
log4j.appender.file=org.apache.log4j.rolling.RollingFileAppender 
log4j.appender.file.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy 
log4j.appender.file.RollingPolicy.FileNamePattern=/path/to/logs/%d{yyyyMMdd}/myLog_%d{yyyyMMddHH}.log 
log4j.appender.file.TriggeringPolicy=org.apache.log4j.rolling.SizeBasedTriggeringPolicy 
log4j.appender.file.TriggeringPolicy.maxFileSize=100000 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 
log4j.appender.file.Append=true 

này sẽ tạo ra một thư mục timestamped (một thư mục mỗi ngày - tùy chọn) với các bản ghi với định dạng sau (một cho mỗi giờ cho mục đích thử nghiệm - thay đổi FileNamePattern cho phù hợp với nhu cầu của bạn):

myCompanyLog_20160203 30.log

myCompanyLog_20160203 30.log