【发布时间】:2016-01-31 18:54:38
【问题描述】:
我正在尝试以语法方式配置 logback 以使用 SizeBasedTriggeringPolicy。
我正在尝试使用 10KB 的日志文件和 3 个文件作为限制来测试它。
由于某种原因它失败了。
我做错了什么??
这是我的代码:
class LogbackLogger implements ILogger {
private String componentName;
private Logger logger;
public LogbackLogger(String name) {
componentName = "[" + name + "]";
this.logger = ((Logger) LoggerFactory.getLogger(componentName));
}
public void info(String msg) {
logger.info(msg);
}
public void debug(String msg) {
logger.debug(msg);
}
public void warning(String msg) {
logger.warn(msg);
}
public void error(String msg) {
logger.error(msg);
}
public void error(String msg, Throwable t) {
logger.error(msg, t);
}
public void dispose() {
// Stop all appenders, threads etc. This command is take from the
// "Stopping logback-classic" section in here:
// http://logback.qos.ch/manual/configuration.html
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
loggerContext.stop();
}
public void setLevel(Level level)
{
this.logger.setLevel(level);
}
public void removeConsoleAppender() {
this.logger.detachAppender("Console");
}
public void addConsoleAppender() {
if (this.logger.getAppender("Console") != null) {
return;
}
ConsoleAppender<ILoggingEvent> consoleAppender = new ConsoleAppender<ILoggingEvent>();
consoleAppender.setName("Console");
consoleAppender.setTarget("System.out");
consoleAppender.setEncoder(getEncoder(this.logger.getLoggerContext()));
consoleAppender.setContext(this.logger.getLoggerContext());
consoleAppender.start();
this.logger.addAppender(consoleAppender);
}
public void addFileAppender(String fileName, long logLimitInKB, int fileCount) {
if (this.logger.getAppender("File") != null) {
log("FileAppender already exists");
return;
}
log("About to create FileAppender. fileName:" + fileName);
FileAppender<ILoggingEvent> fileAppender = createFileAppender(fileCount, logLimitInKB, fileName);
fileAppender.setEncoder(getEncoder(this.logger.getLoggerContext()));
fileAppender.start();
this.logger.addAppender(fileAppender);
}
private Encoder<ILoggingEvent> getEncoder(LoggerContext loggerContext) {
final PatternLayoutEncoder encoder = new PatternLayoutEncoder();
encoder.setContext(loggerContext);
encoder.setPattern("%date{ISO8601} %-5level [%thread] %logger{35} %msg%n");
encoder.setOutputPatternAsHeader(false);
encoder.start();
return encoder;
}
private FileAppender<ILoggingEvent> createFileAppender(int fileCount, long logLimitInKB, String fileName) {
if (fileCount <= 1) {
log("Creating FileAppender");
FileAppender<ILoggingEvent> fileAppender = new FileAppender<ILoggingEvent>();
fileAppender.setName("File");
fileAppender.setFile(fileName);
fileAppender.setAppend(false);
fileAppender.setPrudent(false);
fileAppender.setContext(this.logger.getLoggerContext());
return fileAppender;
}
log("Creating RollingFileAppender");
RollingFileAppender<ILoggingEvent> fileAppender = new RollingFileAppender<ILoggingEvent>();
fileAppender.setContext(this.logger.getLoggerContext());
fileAppender.setName("File");
fileAppender.setFile(fileName);
fileAppender.setAppend(false);
fileAppender.setPrudent(false);
FixedWindowRollingPolicy rollingPolicy = new FixedWindowRollingPolicy();
rollingPolicy.setContext(this.logger.getLoggerContext());
rollingPolicy.setParent(fileAppender);
rollingPolicy.setMinIndex(1);
rollingPolicy.setMaxIndex(fileCount - 1);
rollingPolicy.setFileNamePattern(fileName + "%i.log");
fileAppender.setRollingPolicy(rollingPolicy);
TriggeringPolicy<ILoggingEvent> triggerPolicy = new SizeBasedTriggeringPolicy(logLimitInKB +" kb");
fileAppender.setTriggeringPolicy(triggerPolicy);
triggerPolicy.start();
rollingPolicy.start();
return fileAppender;
}
private void log(String msg)
{
System.out.println("#############################################################");
System.out.println(msg);
System.out.println("#############################################################");
}
}
感谢您的帮助。
【问题讨论】: