Log4j दैनिक रोटेशन और किसी भी फ़ाइल परिशिष्ट के साथ मासिक प्रतिधारण


11

क्या यह किसी भी लॉग -4 जे परिशिष्ट के साथ विशिष्ट रोटेशन समय और अवधारण सीमा के साथ लॉग लिखने के लिए संभव है।
लक्ष्य होगा:

  • प्रत्येक दिन के लिए एक लॉग फ़ाइल है; नए लॉग के लिए आधी रात को एक नई फ़ाइल बनाएं
  • लॉग फ़ाइलों को रखने और निश्चित समय के बाद स्वचालित रूप से उन्हें हटाने के लिए; इसलिए एक्स दिनों की तुलना में लॉग फ़ाइलों को हटाएँ (जैसे 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 संपत्ति रखने के लिए संग्रहित फ़ाइलों की अधिकतम संख्या को नियंत्रित करता है, अतुल्यकालिक रूप से पुरानी फ़ाइलों को हटा रहा है। उदाहरण के लिए, यदि आप मासिक रोलओवर निर्दिष्ट करते हैं, और मैक्सहिस्ट्री को 6 पर सेट करते हैं, तो 6 महीने के अभिलेखागार की फाइलें 6 महीने से अधिक पुरानी फाइलों के साथ रखी जाएंगी। पुराने संग्रहीत लॉग फ़ाइलों के रूप में नोट निकाले जाते हैं, लॉग फ़ाइल संग्रह के उद्देश्य के लिए बनाए गए किसी भी फ़ोल्डर को उपयुक्त के रूप में हटा दिया जाएगा।

आप TimeBasedRollingPolicy पर अधिक जानकारी देख सकते हैं


@PaEEdison बस उत्सुक हैं, क्या ये कॉन्फ़िगरेशन काम नहीं कर रहे हैं?
javaGroup456

1
यह समाधान logback नहीं log4j पर आधारित है
benbenw

वाह .... @benbenw सही है !! मुझे समझ नहीं आ रहा है कि मैंने इस प्रश्न को लॉगबैक के रूप में गलत समझा था ..... मुझे याद दिलाने के लिए धन्यवाद। कृपया log4j के लिए उसका जवाब देखें।
टोनारिमोची

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: टाइमबेडरोलिंगपुलिस


1

अधिकांश उत्तर लॉगबैक पर आधारित हैं। लेकिन सवाल log4j 1.2 (पुराने ...) के बारे में है

DailyRollingFileAppender का जवाब देने से काम नहीं चलेगा। संपत्ति का org.apache.log4j.DailyRollingFileAppenderसमर्थन न करें http://log.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.htmlMaxBackupIndex देखें (यह इसके लिए है )RollingFileAppender

आप में रुचि हो सकती है: DailyRollingFileAppender -log4j में MaxBackupIndex का उपयोग करें

और एक संभावित उत्तर के लिए: Log4j रॉलिंगपोलिश और मैक्सबैकअपइंडेक्स

लेकिन आपको शायद slf4j log4j "एमुलेशन" ( http://www.slf4j.org/legacy.html#log4j-over-slf4j ) का उपयोग करना चाहिए और लॉगबैक के माध्यम से अपने लॉग को रूट करें (बिना किसी कोड परिवर्तन के) जहां यह लागू करना आसान हो। ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.