期望是使用相同名称的当前日志(即test.log) 档案文件名称应为test_(CurrentDate).log.1。
/logs/projectlogs/test.log
/ logs / projectlogs / test_20160430.log.1
/ logs / projectlogs / test_20160430.log.2
/ logs / projectlogs / test_20160430.log.3
使用以下属性文件,当前日期将附加所有文件。
log4j.properties ::
N > 0
答案 0 :(得分: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 :(得分:0)
您想要实现的是“基于大小和时间的文件命名和触发策略”(SizeAndTimeBasedFNATP),可以在最新版本的logback包中找到,该版本目前是1.1.7,但是,它可以是在1.1.2中也可以找到,因为它可以在没有太多异步过程的情况下产生更多可预测的结果(即使1.1.2更慢)。
logback包的工作方式与log4j类似,但使用基于XML的配置文件(logback.xml),在您的情况下可能看起来像下面一样(注意 test_%d {yyyyMMdd} .log。%i < / strong> - 这是你的模式)。
请注意,遗憾的是,可能限制日期内的索引。因此,每个日期不能只有5个日志块 - 每个日期将完全记录日志块索引,每个日期独立。但是,您可以限制日期总数和(在1.1.7中)日志文件夹的总大小(使用ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy)。
另外我建议你至少使用10Mb的块大小(100Kb很小),一般来说,更大的块,更容易通过log 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
希望它有所帮助。