bboss擴充了log4j滾動切割檔案插件org.apache.log4j.NormalRollingFileAppender,NormalRollingFileAppender可以實作按照日期時間格式向前命名滾動的日志檔案和目前的日志檔案(預設官方滾動插件不支援按日期格式命名目前檔案),同時也可以按照整數索引方式向前命名滾動的日志檔案和目前的日志檔案(預設官方滾動插件不支援按日期格式命名目前檔案),在滾動日志檔案的同時,不會重命名已經産生的日志名稱(預設插件會重命名)。通過不重命名已有檔案和生成新的帶日期或者整數索引的日志檔案,可以很好地解決logstash、filebeat、flume等日志資料采集工具在日志檔案滾動切割的時候,漏掉正在切割檔案中的日志資料,因為有可能資料還沒采集完,檔案已經被重命名了。
在工程中NormalRollingFileAppender引入插件
maven坐标
<dependency>
<groupId>com.bbossgroups.plugins</groupId>
<artifactId>bboss-plugin-log4j</artifactId>
<version>5.0.5.7</version>
</dependency>
gradle坐标
compile 'com.bbossgroups.plugins:bboss-plugin-log4j:5.0.5.7'
在log4j.xml檔案中配置擴充插件NormalRollingFileAppender
<appender name="invoke_log4j" class="org.apache.log4j.NormalRollingFileAppender">
<param name="useDatePattern" value="true" />
<param name="file" value="test.log" />
<param name="append" value="true" />
<param name="maxFileSize" value="10MB" />
<param name="MaxBackupIndex" value="10"/>
<param name="BufferedIO" value="false" />
<param name="BufferSize" value="8192" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{dd/MM/yy HH:mm:ss:sss z}] %t %5p %c{2}: %m%n" />
</layout>
</appender>
<logger name="org.gradle.Invoke" additivity="false">
<level value = "info" />
<appender-ref ref = "invoke_log4j" />
</logger>
注意事項:
useDatePattern參數必須配置在file參數前面,true 日志檔案名稱采用日期格式 false 采用整數索引格式(預設值)
BufferedIO是否采用緩沖機制,true 采用 false 不采用。
java程式中記錄日志:
package org.gradle;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Invoke {
/* private static final Logger servicelog = LoggerFactory.getLogger("servicelog");
private static final Logger weblog = LoggerFactory.getLogger("weblog");*/
private static final Logger log_invoke = LoggerFactory.getLogger(Invoke.class);
// private static final Logger log_httpclientutils = LoggerFactory.getLogger(HttpClientUtils.class);
//
@Test
public void log() {
long interval = 5l;
while(true) {
log_invoke.info("日志資訊");
if(interval > 0) {
try {
Thread.currentThread().sleep(interval);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
生成的日志檔案截圖