当我使用RollingFileAppender时,它不会创建日志文件,但是如果我使用FileAppender,它就会创建日志文件。使用fileAppender =新的RollingFileAppender();没有创建日志文件。使用fileAppender =新的FileAppender();将创建日志文件。
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.FileAppender;
import ch.qos.logback.core.rolling.RollingFileAppender;
public class LoggerUtils {
private static final String FILE_APPENDER = "FILE_APPENDER";
public static void main(String[] args) throws InterruptedException {
Logger foo = createLoggerFor("foo");
Logger bar = createLoggerFor("bar");
foo.info("this is from foo log");
bar.info("this is from bar log");
}
private static Logger createLoggerFor(String string) {
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
PatternLayoutEncoder ple = new PatternLayoutEncoder();
ple.setPattern("%date %level [%thread] %logger{10} [%file:%line] %msg%n");
ple.setContext(lc);
ple.start();
FileAppender<ILoggingEvent> fileAppender = new RollingFileAppender<ILoggingEvent>();
fileAppender.setFile("test_two.log");
fileAppender.setEncoder(ple);
fileAppender.setContext(lc);
fileAppender.start();
Logger logger = (Logger) LoggerFactory.getLogger(string);
logger.addAppender(fileAppender);
logger.setLevel(Level.DEBUG);
logger.setAdditive(false);
logger.warn("Testing....");
return logger;
}
}发布于 2022-12-01 11:20:18
对于RollingFileAppender,您必须同时指定一个RollingPolicy和一个TriggeringPolicy。以下是该链接的引文:
要想有任何用处,RollingFileAppender必须同时设置RollingPolicy和TriggeringPolicy。
也是
但是,如果它的RollingPolicy也实现了TriggeringPolicy接口,那么只需要显式地指定前者。
实际上,如果您查看RollingFileAppender 这里和这里的源代码,就会发现这些策略有“非空”的先决条件:
public void start() {
if (triggeringPolicy == null) {
addWarn("No TriggeringPolicy was set for the RollingFileAppender named " + getName());
addWarn(MORE_INFO_PREFIX + RFA_NO_TP_URL);
return; // BOOM
}
...
if (rollingPolicy == null) {
addError("No RollingPolicy was set for the RollingFileAppender named " + getName());
addError(MORE_INFO_PREFIX + RFA_NO_RP_URL);
return; // BOOM
}
...
}因此,为了纠正这种情况,如果使用标准TimeBasedRollingPolicy,则相关代码可以如下所示:
TimeBasedRollingPolicy可能是最流行的滚动策略。它定义了基于时间的滚转策略,例如按日或按月。
RollingFileAppender<ILoggingEvent> fileAppender = new RollingFileAppender<>();
fileAppender.setFile("test_two.log");
fileAppender.setEncoder(ple);
fileAppender.setContext(lc);
TimeBasedRollingPolicy<ILoggingEvent> logFilePolicy = new TimeBasedRollingPolicy<>();
logFilePolicy.setContext(lc);
logFilePolicy.setParent(fileAppender);
logFilePolicy.setFileNamePattern("test_two.log.%d{yyyy-MM-dd_HH}");
logFilePolicy.setMaxHistory(7);
logFilePolicy.start();
fileAppender.setRollingPolicy(logFilePolicy);
fileAppender.start();使用此代码,我可以看到始终在创建配置的test_two.log文件。
https://stackoverflow.com/questions/74631129
复制相似问题