Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以编程方式在logback中添加appender_Java_Logging_Logback_Slf4j - Fatal编程技术网

Java 以编程方式在logback中添加appender

Java 以编程方式在logback中添加appender,java,logging,logback,slf4j,Java,Logging,Logback,Slf4j,我试图在logback中动态添加一个appender。这是我的密码 LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); PatternLayoutEncoder ple = new PatternLayoutEncoder(); ple.setPattern("%date %level [%thread] %logger{10} [%file:%line] %msg%n"); ple.setContext(l

我试图在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);
LoggerContext lc=(LoggerContext)LoggerFactory.getILoggerFactory();
PatternLayoutCoder ple=新的PatternLayoutCoder();
setPattern(“%date%级别[%thread]%logger{10}[%file:%line]%msg%n”);
ple.setContext(lc);
ple.start();
FileAppender FileAppender=新FileAppender();
字符串logFile=“new.log”;
fileAppender.setFile(日志文件);
fileAppender.setEncoder(ple);
setContext(lc);
fileAppender.start();
ch.qos.logback.classic.Logger日志记录器=
(ch.qos.logback.classic.Logger)LoggerFactory.getLogger(ModuleMessageHandler.class);
logbackLogger.addAppender(fileAppender);
logbackLogger.setLevel(Level.DEBUG);
logbackLogger.setAdditive(假);

它工作正常,但仅适用于添加了appender的特定记录器。有没有一种方法可以让应用程序中的所有记录器都能使用它?我正在寻找一种动态添加和删除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();
。。。将文件追加器与
ModuleMessageHandler
的记录器实例相关联

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

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

您想要获取根记录器。Logger root=(Logger)LoggerFactory.getLogger(Logger.root\u Logger\u NAME);不过这只是回写,没有看到任何SLF4jSetAdditional(false)在这里做什么?
ch.qos.logback.classic.Logger logbackLogger =
                (ch.qos.logback.classic.Logger)LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
logbackLogger.addAppender(fileAppender);