您可以通过编程方式向 Log4j 添加/删除追加器:
ConsoleAppender console = new ConsoleAppender(); //create appender
//configure the appender
String PATTERN = "%d [%p|%c|%C{1}] %m%n";
console.setLayout(new PatternLayout(PATTERN));
console.setThreshold(Level.FATAL);
console.activateOptions();
//add appender to any Logger (here is root)
Logger.getRootLogger().addAppender(console);
FileAppender fa = new FileAppender();
fa.setName("FileLogger");
fa.setFile("mylog.log");
fa.setLayout(new PatternLayout("%d %-5p [%c{1}] %m%n"));
fa.setThreshold(Level.DEBUG);
fa.setAppend(true);
fa.activateOptions();
//add appender to any Logger (here is root)
Logger.getRootLogger().addAppender(fa);
//repeat with all other desired appenders
我建议你把它放在一个init()的某个地方,你确信,这将在其他任何事情之前执行。然后,您可以使用以下命令删除根记录器上的所有现有追加器
Logger.getRootLogger().getLoggerRepository().resetConfiguration();
并从添加自己的开始。当然,您需要在类路径中使用log4j才能正常工作。
备注:
您可以采取任何您喜欢的添加附加器。我只是采用了根记录器,因为它位于所有事物的底部,并且将处理通过其他类别中的其他追加器传递的所有内容(除非通过设置加性标志以其他方式配置)。Logger.getLogger(...)
如果您需要了解日志记录的工作原理以及如何确定日志的写入位置,请阅读本手册以获取有关该内容的更多信息。
总之:
Logger fizz = LoggerFactory.getLogger("com.fizz")
将为您提供“com.fizz”类别的记录器。
对于上面的示例,这意味着使用它记录的所有内容都将引用到根记录器上的控制台和文件追加器。
如果您将追加器添加到 Logger.getLogger(“com.fizz”).addAppender(newAppender),则来自 的记录将由来自根记录器和 .
您不会使用配置创建记录器,只需为系统中所有可能的类别提供处理程序即可。fizz
newAppender