logging - Log4j2:我无法创建空日志文件
问题描述
我想每天创建一个日志文件。它可以工作,但我也希望生成空文件(0 kb,没有数据)。目前,空文件被覆盖。也许我应该使用“minSize”,但我找不到有关如何在 log4j2.properties 文件中编写它的文档。我的 log4j2 属性文件包含以下内容:
appender.dss-b05-log.type=RollingFile
appender.dss-b05-log.name=B05Log
appender.dss-b05-log.fileName=myFolder/B05_my_log.txt
appender.dss-b05-log.filePattern=myFolder/B05_my_log_D%d{yyyyMMdd}.txt
appender.dss-b05-log.layout.type=PatternLayout
appender.dss-b05-log.layout.pattern=%m%n
appender.dss-b05-log.policies.type=Policies
appender.dss-b05-log.policies.cron.type=CronTriggeringPolicy
appender.dss-b05-log.policies.cron.schedule=0 0 0 * * ?
appender.dss-b05-log.policies.cron.evaluateOnStartup=true
解决方案
你应该调查一下CronTriggeringPolicy
。这是一个小例子:
log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<RollingFile name="RollingFile" filePattern="logs/app-%d{yyyy-MM-dd-HH}-%i.log">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<CronTriggeringPolicy schedule="0/5 * * * * ?"/>
<SizeBasedTriggeringPolicy size="250 MB"/>
</Policies>
<DirectWriteRolloverStrategy maxFiles="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
编码:
package click.webelement.so;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class LoggingExample {
static final Logger LOGGER = LogManager.getLogger(LoggingExample.class);
public static void main(String[] args) {
while(true){
LOGGER.info("Test - " + System.currentTimeMillis());
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
您可以看到每个第二个文件都是空的。
推荐阅读
- javascript - 有没有办法以编程方式获取所有全局 HTML 属性的列表?
- bash - 如何在目录中搜索文件,然后使用 ffmpeg 将该目录的名称刻录到里面的文件中?
- docker - 为什么我会 CrashLoopBackOff
- c++ - 为什么在这个链表的实现中,这个 C++ 构造函数在同一个内存位置被调用了两次?
- python - 如何在连接四游戏中确定获胜者
- c# - DevExpress - 在 TreeList 中选择多个复选框
- c++ - 我应该如何使用 c++ 处理“std::cerr”和“std::cin.fail()”?
- c# - 有没有办法通过 MVVM 和 XAML 来拉伸 DataGrid 中的行以垂直占用所有空间?
- android - Listview 自定义过滤器在过滤列表中单击错误的项目
- c# - C# 使用 for() 处理多个变量