Log4j luân chuyển hàng ngày và duy trì hàng tháng với bất kỳ ứng dụng tập tin nào


11

Có thể với bất kỳ ứng dụng log4j nào ghi nhật ký với thời gian quay và giới hạn lưu giữ cụ thể.
Mục tiêu sẽ là:

  • để có một tệp nhật ký cho mỗi ngày; tạo một tệp mới vào nửa đêm cho nhật ký mới
  • để giữ các tệp nhật ký và xóa chúng tự động sau một khoảng thời gian nhất định; vì vậy hãy xóa các tệp nhật ký cũ hơn X ngày (ví dụ: 30 ngày)

Có vẻ như việc quay vòng là có thể nhưng giới hạn thời gian lưu là không thể với log4j

Phiên bản log4j là 1.2.

Câu trả lời:


4

thuộc tính log4J này làm việc cho tôi

log4j.rootLogger=DEBUG, stdout, file

# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=/opt/cronjob/logs/cronlogs.log
log4j.appender.file.MaxFileSize=1028MB
log4j.appender.file.MaxBackupIndex=10
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

4

Câu trả lời của tôi dựa trên logback, không log4j(xin lỗi vì sự nhầm lẫn ..)


Bạn có thể đạt được vòng quay nhật ký đó bằng cách sử dụng TimeBasedRollingPolicy.

ví dụ)

<appender name="SYSTEMLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>./logs/system.log</file>
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>./logs/system.log.%d{yyyy-MM-dd}</fileNamePattern>
    <!-- keep last 30 days of logs -->
    <maxHistory>30</maxHistory>
  </rollingPolicy>
  <encoder>
    <charset>UTF-8</charset>
      <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %msg %n</Pattern>
  </encoder>
</appender>

Nó sẽ xoay vào nửa đêm và sẽ xóa các tệp nhật ký cũ hơn 30 ngày.

fileNamePotype: Thời gian cuộn qua được suy ra từ giá trị của fileNamePotype

maxHistory: Thuộc tính maxHistory tùy chọn kiểm soát số lượng tệp lưu trữ tối đa để giữ, xóa không đồng bộ các tệp cũ hơn. Ví dụ: nếu bạn chỉ định cuộn qua hàng tháng và đặt maxHistory thành 6, thì các tệp lưu trữ có giá trị 6 tháng sẽ được giữ với các tệp cũ hơn 6 tháng đã bị xóa. Lưu ý vì các tệp nhật ký lưu trữ cũ sẽ bị xóa, mọi thư mục được tạo cho mục đích lưu trữ tệp nhật ký sẽ bị xóa nếu thích hợp.

Bạn có thể kiểm tra thêm thông tin về TimeBasingRollingPolicy


@PaulEdison Chỉ tò mò, Có phải cấu hình này không hoạt động?
javagroup456

1
Giải pháp này dựa trên logback chứ không phải log4j
benbenw

Wow .... @benbenw đúng !! Tôi không hiểu tại sao tôi lại hiểu nhầm câu hỏi này là logback ..... Cảm ơn bạn đã nhắc nhở tôi. Vui lòng tham khảo câu trả lời của anh ấy / cô ấy cho log4j.
tonarimochi

3

vâng, chúng tôi có thể!

tập tin: project->src->main->resources->logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">

  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>folderName/logFile.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>folderName/archive/logFile.%d{dd-MM-yyyy}.log</fileNamePattern>
      <!-- keep last 30 days of logs -->
      <maxHistory>30</maxHistory>
    </rollingPolicy>

    <!-- filter by level (optional) -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>DEBUG</level>
    </filter>

    <encoder>
      <pattern>%date %-5level [%thread] %file:%L [%M] - %msg%n</pattern>
    </encoder>
  </appender>

  <!-- you can filter by type of level (optional) -->
  <root level="DEBUG">
    <appender-ref ref="FILE"/>
  </root>
</configuration>

để biết thêm thông tin, xem tài liệu: TimeBasingRollingPolicy

JavaDoc: TimeBasingRollingPolicy


1

Hầu hết các câu trả lời được dựa trên logback. Nhưng câu hỏi là về log4j 1.2 (cũ ...)

câu trả lời đề cập đến DailyRollingFileAppender cũng sẽ không hoạt động. org.apache.log4j.DailyRollingFileAppenderkhông hỗ trợ MaxBackupIndextài sản, hãy xem http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html (cái này là dành cho RollingFileAppender)

bạn có thể quan tâm: Sử dụng MaxBackupIndex trong DailyRollingFileAppender -log4j

và cho câu trả lời có thể có: Log4j Rollingpolicy và Maxbackup Index

Nhưng có lẽ bạn nên sử dụng "mô phỏng" slf4j log4j ( http://www.slf4j.org/legacy.html#log4j-over-slf4j ) và định tuyến nhật ký của bạn thông qua logback (không có bất kỳ thay đổi mã nào) .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.