java - 以编程方式在 logback 中添加附加程序

标签 java logging logback slf4j

我正在尝试在 logback 中动态添加附加程序。这是我的代码。

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);

它工作正常,但仅适用于添加附加程序的特定记录器。有没有办法让它适用于应用程序中的所有记录器?我正在寻找一种动态添加和删除附加程序的方法。

最佳答案

这部分代码:

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);

...将文件附加程序与 ModuleMessageHandler 的记录器实例关联起来。

如果您希望文件附加程序与应用程序中的所有记录器实例关联,那么(如@BillO'Neil)建议您必须将文件附加程序与根关联记录器:

ch.qos.logback.classic.Logger logbackLogger =
                (ch.qos.logback.classic.Logger)LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
logbackLogger.addAppender(fileAppender);

关于java - 以编程方式在 logback 中添加附加程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47299109/

相关文章:

java - Fitnesse slim 夹具变量替换失败

ruby-on-rails - 在 Rails 中记录用户事件

java - 为什么java action System.out 在Oozie 中执行时消失了?

logging - 动态更改 logback 附加程序的过滤器?

grails - 使Grails logback格式等于默认的Spring Boot格式

java - AsyncTask 是否同时工作?

java - iOS-实际设备-appium滚动: Need to scroll to a particular element and click

java - 如何使用 MultiResourceItemReader 读取多个文件?

java - 在哪里检查日志为什么 VM 不运行带有自定义 jar 的 jconsole?

java - 使用 logback 获取运行时最新日志的文件名