如何在运行时通过java动态打开或关闭log4j2中rootLogger的一个appender?
例如,我想禁用Console Appender:
...
<Loggers>
<Root level="INFO">
<AppenderRef ref="Console"/>
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
...
有可能吗?
答案 0 :(得分:1)
您可以以编程方式添加或删除appender。在您的情况下,请删除Console
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
final Configuration config = ctx.getConfiguration();
config.getRootLogger().removeAppender("CONSOLE");
ctx.updateLoggers();
有一个LifeCycle接口,其中包含方法stop
和start
,但看起来在停止后无法重新启动appender。
答案 1 :(得分:0)
您可以向控制台appenderref添加脚本过滤器,以检查系统属性的值。然后,只需在要禁用日志记录到控制台时设置该属性。如果您想重新打开它,请将其重置。