在运行时检索 Log4J 追加器列表

2022-09-03 14:27:24

是否可以在运行时检索 log4j 中配置的所有追加器的列表?

我将进一步充实这个场景。给定以下配置,我将如何检索所有追加器(stdout 和 altstdout)?

log4j.rootLogger=error, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.altstdout=org.apache.log4j.ConsoleAppender
log4j.appender.altstdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
log4j.appender.altstdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

答案 1

如果要访问为所有记录器配置的所有追加器,则必须执行类似如下操作

for (Enumeration loggers=LogManager.getCurrentLoggers(); loggers.hasMoreElements(); )  {
    Logger logger = (Logger) loggers.nextElement();
    for (Enumeration appenders=logger.getAllAppenders(); appenders.hasMoreElements(); )  {
        Appender appender = (Appender) appenders.nextElement();
        ...

我不知道为什么log4j没有像LogManager.getAllAppenders()这样的方法,但它看起来像是
缺点。


答案 2

这是你需要的一个

log4j Method getAllAppenders


推荐