2016-04-30 25 views
1

期望是使當前日誌具有相同名稱(即test.log) ,並且存檔文件名應爲test_(CurrentDate).log.1。我可以使用log4j具有Below Log文件結構嗎?

/logs/projectlogs/test.log

/日誌/ projectlogs/test_20160430.log.1

/日誌/ projectlogs/test_20160430.log.2

/日誌/ projectlogs/test_20160430.log.3

使用下面的屬性文件,當前日期會附加所有文件。

log4j.properties ::

log4j.rootLogger= ALL, A1, file, rollingAppender 
#log4j.date=contains current date 
log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.File=C:/logs/projectlogs/test_${log4j.date}.log 
log4j.appender.file.MaxFileSize=100KB 
log4j.appender.file.MaxBackupIndex=5 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss:SSS zzz} %-5p[%t] %m%n 

回答

1

log4j的2手冊中有許多示例配置,並在RollingFileAppender進行了部分有符合你要求的例子:

http://logging.apache.org/log4j/2.x/manual/appenders.html#RollingFileAppender

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="warn" name="MyApp" packages=""> 
    <Appenders> 
    <RollingFile name="RollingFile" fileName="logs/projectlogs/test.log" 
       filePattern="logs/projectlogs/$${date:yyyy-MM}/test-%d{yyyy-MM-dd-HH}-%i.log.gz"> 
     <PatternLayout> 
     <Pattern>%d %-5p[%t] %c{1.} %m%n</Pattern> 
     </PatternLayout> 
     <Policies> 
     <TimeBasedTriggeringPolicy interval="5" modulate="true"/> 
     <SizeBasedTriggeringPolicy size="100 MB"/> 
     </Policies> 
    </RollingFile> 
    </Appenders> 
    <Loggers> 
    <Root level="trace"> 
     <AppenderRef ref="RollingFile"/> 
    </Root> 
    </Loggers> 
</Configuration> 

也可能是你的興趣是什麼Log4j- 2.5引入了刪除操作,可以讓用戶更好地控制在翻滾時間刪除哪些文件。請參閱http://logging.apache.org/log4j/2.x/manual/appenders.html#CustomDeleteOnRollover

+1

您的原始配置使用Log4j 1.x.要利用Log4j 2功能,您不需要重新編寫應用程序。相反,只需包含log4j-1。2-api廣口瓶。這將允許將Log4j 1.2 API的調用路由到Log4j 2. – rgoers

+1

@Remko Popma:此解決方案對我很有幫助,非常感謝。 –

+0

@Remko Popma:只是一個問題,我們可以使用log4j1.x來實現這個功能嗎? –

0

要實現的是所謂的「大小和時間根據文件命名和觸發策略」是什麼(SizeAndTimeBasedFNATP),可以在包裝的logback的最新版本中找到,現在是1.1.7,然而,它也可以在1.1.2中找到,因爲它在沒有太多異步過程的情況下產生更多可預測的結果(儘管1.1.2更慢)。

的的logback包類似的方式,log4j的工作,但使用它,你的情況可能看起來像一個下方(注意TEST_%d {}年月日基於.LOG XML配置文件(logback.xml)%我 - - 這是你的模式)。

請注意,不幸的是,目前尚不可能限制日期內的索引。因此,每個日期不能只有5個日誌塊 - 每個日期都將使用獨立於每個日期的日誌塊索引完全記錄。但是,您可以限制日期總數(1.1.7中)和日誌文件夾總大小(使用ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy)。

另外,我建議你使用的10Mb的塊大小至少(在100Kb很小),爲更大的塊,一般來講,更容易日誌LIB(更少的CPU消耗)來維持。

<?xml version="1.0" ?> 
<configuration> 
    <property name="log.folder" value="C:/logs/projectlogs"/> 
<!-- UNCOMMENT BELOW SECTION IF CONSOLE IS REQUIRED --> 
<!-- 
    <appender class="ch.qos.logback.core.ConsoleAppender" name="CONSOLE"> 
    <encoder> 
     <pattern>[%p] [%thread] %logger - %msg%n</pattern> 
    </encoder> 
    </appender> 
--> 
    <appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="FILE"> 
    <File>${log.folder}/test.log</File> 
    <Append>true</Append> 
    <encoder> 
     <pattern>%d{ISO8601} [%thread] %-5level %logger{35} - %msg%n</pattern> 
    </encoder> 
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
      <fileNamePattern>${log.folder}/test_%d{yyyyMMdd}.log.%i</fileNamePattern> 
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 
       <maxFileSize>100KB</maxFileSize> 
      </timeBasedFileNamingAndTriggeringPolicy> 
      <!-- keep 30 days' worth of history --> 
      <maxHistory>30</maxHistory> 
      <!-- up to 10 GB max --> 
      <totalSizeCap>10GB</totalSizeCap> 
      <MaxFileSize>100KB</MaxFileSize> 
    </rollingPolicy> 
    </appender> 

    <root> 
    <level value="INFO"/> 
    <appender-ref ref="FILE"/> 
    </root> 

    <logger name="Main"> 
    <level value="DEBUG" /> 
    </logger>  

    <logger name="ch.qos"> 
    <level value="WARN"/> 
    </logger> 
</configuration> 

測試Java應用程序

package logtester; 
import org.apache.log4j.Logger; 
public class LogTester { 
    public static void main(String[] args) { 
     Logger logger = Logger.getLogger("Main"); 
     for(int i = 1; i<=20000; i++) 
      logger.info("Log message "+i); 
    } 
} 

運行後的文件夾結構:

13,230 test.log 
102,929 test_20160430.log.0 
103,168 test_20160430.log.1 
102,816 test_20160430.log.10 
102,816 test_20160430.log.11 
103,168 test_20160430.log.2 
103,168 test_20160430.log.3 
103,168 test_20160430.log.4 
103,168 test_20160430.log.5 
102,815 test_20160430.log.6 
102,816 test_20160430.log.7 
102,816 test_20160430.log.8 
102,816 test_20160430.log.9 

希望它能幫助。

相關問題