การหมุนรายวันและการเก็บข้อมูลรายเดือน Log4j กับ appender ไฟล์ใด ๆ


11

เป็นไปได้ไหมที่ผู้ใช้ log4j ต่อท้ายจะเขียนบันทึกด้วยเวลาการหมุนและการ จำกัด การเก็บรักษาที่เฉพาะเจาะจง
เป้าหมายจะเป็น:

  • มีล็อกไฟล์สำหรับแต่ละวัน สร้างไฟล์ใหม่ตอนเที่ยงคืนสำหรับบันทึกใหม่
  • เพื่อเก็บล็อกไฟล์และลบออกโดยอัตโนมัติหลังจากระยะเวลาหนึ่ง ดังนั้นลบไฟล์บันทึกที่เก่ากว่า X วัน (เช่น 30 วัน)

ดูเหมือนว่าการหมุนเป็นไปได้ แต่ไม่สามารถ จำกัด เวลาการเก็บรักษาได้ด้วย log4j

รุ่น log4j คือ 1.2

คำตอบ:


4

คุณสมบัติ log4J นี้ใช้งานได้สำหรับฉัน

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

คำตอบของฉันขึ้นอยู่กับlogbackไม่ใช่log4j(ขออภัยในความสับสน .. )


TimeBasedRollingPolicyคุณสามารถบรรลุการหมุนบันทึกว่าด้วยการใช้

ตัวอย่างเช่น)

<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>

มันจะหมุนเวียนในเวลาเที่ยงคืนและจะลบไฟล์บันทึกเก่ากว่า 30 วัน

fileNamePattern: ช่วงเวลาโรลโอเวอร์ถูกอนุมานจากค่าของ fileNamePattern

maxHistory: คุณสมบัติ maxHistory ซึ่งเป็นตัวเลือกจะควบคุมจำนวนไฟล์เก็บถาวรสูงสุดที่จะจัดเก็บแบบอะซิงโครนัสการลบไฟล์เก่า ตัวอย่างเช่นหากคุณระบุโรลโอเวอร์รายเดือนและตั้งค่า maxHistory เป็น 6 ไฟล์เก็บถาวรที่มีมูลค่า 6 เดือนจะถูกเก็บไว้พร้อมกับไฟล์ที่เก่ากว่า 6 เดือนที่ถูกลบทิ้ง หมายเหตุเมื่อไฟล์บันทึกเก่าที่เก็บถาวรถูกลบออกโฟลเดอร์ใด ๆ ที่สร้างขึ้นเพื่อวัตถุประสงค์ในการเก็บถาวรไฟล์บันทึกจะถูกลบออกตามความเหมาะสม

คุณสามารถตรวจสอบข้อมูลเพิ่มเติมเกี่ยวกับTimeBasedRollingPolicy


@ PaulEdison แค่อยากรู้อยากเห็นการกำหนดค่าเหล่านี้ไม่ทำงานหรือไม่
javaGroup456

1
โซลูชันนี้ใช้ logback ไม่ใช่ log4j
benbenw

ว้าว .... @benbenw ถูกต้อง !! ฉันไม่เข้าใจว่าทำไมฉันจึงเข้าใจผิดว่าคำถามนี้เป็น logback ..... ขอบคุณที่เตือนฉัน โปรดอ้างอิงคำตอบของเขา / เธอสำหรับ log4j
tonarimochi

3

ใช่เราทำได้!

ไฟล์: 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>

สำหรับข้อมูลเพิ่มเติมดูเอกสารประกอบ: TimeBasedRollingPolicy

JavaDoc: TimeBasedRollingPolicy


1

คำตอบส่วนใหญ่มาจากการย้อนกลับ แต่คำถามเกี่ยวกับ log4j 1.2 (เก่า ... )

คำตอบที่กล่าวถึง DailyRollingFileAppender จะไม่ทำงานเช่นกัน org.apache.log4j.DailyRollingFileAppenderไม่รองรับMaxBackupIndexคุณสมบัติดูhttp://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html (สำหรับนี้RollingFileAppender)

คุณอาจจะสนใจ: ใช้ MaxBackupIndex ใน DailyRollingFileAppender -log4j

และสำหรับคำตอบที่เป็นไปได้: Log4j Rollingpolicy และ MaxbackupIndex

แต่คุณควรใช้ slf4j log4j "emulation" ( http://www.slf4j.org/legacy.html#log4j-over-slf4j ) และกำหนดเส้นทางบันทึกของคุณผ่าน logback (โดยไม่ต้องเปลี่ยนรหัสใด ๆ ) ซึ่งง่ายต่อการใช้งาน .

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.