如何在运行时访问已配置的Log4J appender?

Set*_*ner 40 java logging log4j

我想在启动时配置一个appender,然后根据需要从各种记录器中动态添加和删除它.我宁愿让log4j自己配置这个appender,只需在需要时获取它的引用.如果那是不可能的,我将不得不自己实例化appender并坚持下去.

Ala*_*ger 25

通常将追加器添加到根记录器中.这是一些伪代码

// get the root logger and remove the appender we want
Logger logger = Logger.getRootLogger();
Appender appender = logger.getAppender("foo");
logger.removeAppender(appender)

// when we want to add it back...
logger.addAppender(appender);
Run Code Online (Sandbox Code Playgroud)

我很确定你可以在其他记录器上执行此操作,而不是根记录器,尽管我从未尝试过.

  • 是的,我知道如果它已被配置为附加到Logger,我可以从Logger中检索一个appender.但是,我正在寻找一种方法来获取在启动时配置的appender**已经附加到记录器. (8认同)

Tho*_*ens 4

Logger类具有从Category类继承getAllAppenders()getAppender()addAppender()removeAppender()方法。然而,Category 类已被弃用,最重要的是,我以前从未尝试过这样做,但这可能是一个有用的起点。

  • “Category”已被“Logger”类取代。`Logger` 只是继承自 `Category`。因此,如果“Category”的方法本身没有被弃用,那么它就完全可以使用。 (2认同)