如何以编程方式从Log4j2中的记录器中删除附加程序?

use*_*656 6 logging log4j2

我可以通过编程方式从log4j2的记录器中删除附加程序吗?

该网站说:“ Log4j 2 API不会公开以任何方式添加,修改或删除附加程序,过滤器或操纵配置的方法”:https : //logging.apache.org/log4j/2.x/manual/configuration.html

但是,如果有人可以提出一种间接的方法来实现这一目标,我将不胜感激。

谢谢。

Ant*_*iuc 8

有一个方法LoggerConfig#removeAppender(String name)将删除特定的 appender 和LoggerConfig#clearAppenders()将删除所有 appender。假设您有一个名称为 的 appender CONSOLE

final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
final Configuration config = ctx.getConfiguration();
config.getRootLogger().removeAppender("CONSOLE");
ctx.updateLoggers();
Run Code Online (Sandbox Code Playgroud)


rgo*_*ers 1

您可以删除 Appender 吗?是的。你应该?几乎总是答案是否定的。如果 LoggerConfig、AsyncAppender 或 RoutingAppender 引用 Appender 怎么办?你会得到一个错误。

在大多数情况下,您确实希望使用更智能的过滤。它们的存在正是为了减少或消除路由到 Appender 的事件数量。