要實現的是所謂的「大小和時間根據文件命名和觸發策略」是什麼(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
希望它能幫助。
您的原始配置使用Log4j 1.x.要利用Log4j 2功能,您不需要重新編寫應用程序。相反,只需包含log4j-1。2-api廣口瓶。這將允許將Log4j 1.2 API的調用路由到Log4j 2. – rgoers
@Remko Popma:此解決方案對我很有幫助,非常感謝。 –
@Remko Popma:只是一個問題,我們可以使用log4j1.x來實現這個功能嗎? –