我在logback文件中设置了两个日志文件。
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/opt/loghome/${instance}/recon.%d{MM-dd-yyyy}.log.zip
</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<append>false</append>
<encoder>
<pattern>%d{MM/dd/yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%X{User} %msg%n</pattern>
</encoder>
</appender>
<appender name="datafile1" class="ch.qos.logback.core.FileAppender">
<file>/opt/loghome/datafiles/file1.log</file>
<append>false</append>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
在java中,这些设置如下:
private static final Logger logger = LoggerFactory
.getLogger(Main.class);
和
private static final Logger logger = LoggerFactory
.getLogger("datafile1");
第一个是标准的应用程序日志文件。第二个存储程序从数据库中检索的数据。
程序然后比较日志文件中的数据并发出一些结果。完成此操作后,我想清除此日志(datafile1),使其为空并准备好进行下一次运行。我怎么能这样做?
N.b该程序是一个24小时的进程,它使用调度程序来运行这项工作。每次运行作业时都不会重新启动。
答案 0 :(得分:2)
似乎您将日志文件用作数据存储?日志文件不是为此而设计的,因此实际上没有办法清除它们。如果要将数据存储在临时位置,请打开文件进行写入,不要记录。
答案 1 :(得分:1)
结束使用:
public void resetLogs() {
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
ContextInitializer ci = new ContextInitializer(lc);
lc.reset();
try {
ci.autoConfig();
} catch (JoranException e) {
e.printStackTrace();
}
}
刷新LoggerContext上下文
答案 2 :(得分:0)
您可以尝试关闭appender并为Logger
添加另一个appender。这是一个例子:
Logger logger = Logger.getLogger("datafile1");
logger.setLevel(Level.ALL);
FileAppender appender = new FileAppender(new PatternLayout("%msg%n"), "/logs/datafile", false);
Logger.getRootLogger().addAppender(appender);
// log data
logger.info("info1");
// here you remove and close the old appender
Logger.getRootLogger().removeAppender(appender);
appender.close();
// replace with a new one appender
appender = new FileAppender(new PatternLayout("%msg%n"), "/logs/datafile", false);
Logger.getRootLogger().addAppender(appender);
// log new data
logger.info("info2");