我正在尝试在logback中动态添加appender。这是我的代码。
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 FileAppender<ILoggingEvent>();
String logFile = "new.log";
fileAppender.setFile(logFile);
fileAppender.setEncoder(ple);
fileAppender.setContext(lc);
fileAppender.start();
ch.qos.logback.classic.Logger logbackLogger =
(ch.qos.logback.classic.Logger)LoggerFactory.getLogger(ModuleMessageHandler.class);
logbackLogger.addAppender(fileAppender);
logbackLogger.setLevel(Level.DEBUG);
logbackLogger.setAdditive(false);
它工作正常,但仅适用于添加了appender的特定记录器。有没有办法让这个适用于应用程序中的所有记录器?我正在寻找一种动态添加和删除appender的方法 感谢
答案 0 :(得分:6)
您的代码的这一部分:
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 FileAppender<ILoggingEvent>();
String logFile = "new.log";
fileAppender.setFile(logFile);
fileAppender.setEncoder(ple);
fileAppender.setContext(lc);
fileAppender.start();
...创建并启动文件追加器。
您的代码的这一部分......
ch.qos.logback.classic.Logger logbackLogger =
(ch.qos.logback.classic.Logger)LoggerFactory.getLogger(ModuleMessageHandler.class);
logbackLogger.addAppender(fileAppender);
logbackLogger.setLevel(Level.DEBUG);
logbackLogger.setAdditive(false);
...将文件appender与ModuleMessageHandler
的记录器实例相关联。
相反,如果您希望文件追加器与应用程序中的所有记录器实例相关联,那么(如@ BillO'Neil)建议您必须将文件追加器与根关联记录器强>:
ch.qos.logback.classic.Logger logbackLogger =
(ch.qos.logback.classic.Logger)LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
logbackLogger.addAppender(fileAppender);