以编程方式在logback中添加appender [英] Programmatically add appender in logback

查看:593
本文介绍了以编程方式在logback中添加appender的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在回退中动态添加追加器.这是我的代码.

I am trying to add an appender dynamically in logback. Here is my code.

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

它可以正常运行,但仅适用于添加了追加程序的特定记录器.有没有办法使它适用于应用程序中的所有记录器?我正在寻找一种动态添加和删除附加程序的方法.

It works ok but works only for the specific logger on which the appender is added. Is there a way to get this to work for all loggers in the application? I am looking for a way to dynamically add and remove appenders.

推荐答案

这部分代码:

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

...创建并启动文件附加器.

... creates and starts the file appender.

这部分代码...

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的记录器实例相关联.

... associates the file appender with the logger instance for ModuleMessageHandler.

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

If, instead, you want the file appender to be associated with all logger instances in your application then (as @BillO'Neil) suggested you must associate the file appender with the root logger:

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

这篇关于以编程方式在logback中添加appender的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆