如何以编程方式从 log4j2 中删除 ConsoleLogger?

我有一个全局记录器配置,我想在我的整个项目中继承它:


<?xml version="1.0" encoding="UTF-8"?>

<Configuration>

    <Appenders>

        <Console name="CONSOLE" target="SYSTEM_OUT">

            <PatternLayout pattern="%d %p %c{1.}: %m%n"/>

            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY" />

        </Console>


        <RollingRandomAccessFile name="APP" fileName="/logs/application.logs" filePattern="/logs/application-%d{yyyy-MM-dd}.log.gz">

            <PatternLayout pattern="%d %p %c{1.}: %m%n"/>

            <Filters>

                <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>

            </Filters>

        </RollingRandomAccessFile>

    </Appenders>


    <Loggers>

        <Root level="INFO">

            <AppenderRef ref="APP" />

            <AppenderRef ref="CONSOLE" />

        </Root>

    </Loggers>

</Configuration>

问题:仅在生产中,我想删除其中一个记录器,appender CONSOLE。


由于log4j2.xml配置文件不支持条件,我考虑过以编程方式删除控制台附加程序:


final LoggerContext context = (LoggerContext) LogManager.getContext(false);

final Configuration config = context.getConfiguration();

System.out.println(config.getAppenders());

问题:这只打印{DefaultConsole-2=DefaultConsole-2}


问题:为什么我在这里看不到APPor CONSOLEappender?而且,我怎样才能删除控制台附加程序呢?


也许有可能以某种方式拦截log4j 上下文加载,以便我可以以编程方式跳过 CONSOLE appender?


旁注:我正在记录如下,在生产中应该只转到APP附加程序,而不是控制台。


private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());

LOGGER.info("test");


繁星淼淼
浏览 69回答 1
1回答

幕布斯6054654

对于<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY" />在 Console Appender 中,您可以添加环境变量<ThresholdFilter level="${CONSOLE_LOG_LEVEL}" onMatch="ACCEPT" onMismatch="DENY" /> 或类似的东西并将此变量设置为OFF. 我也面临这个问题,它对我有用。这也适用于 vm args,如下所示:<ThresholdFilter level="${sys:console.log.level}" ... />启动应用程序时:java -jar -Dconsole.log.level=ERROR旁注:以编程方式,删除控制台附加程序也可以:public static void main(String[] args) {&nbsp; &nbsp; ctx = SpringApplication.run(MyApp.class, args);&nbsp; &nbsp; final LoggerContext context = (LoggerContext) LogManager.getContext(false);&nbsp; &nbsp; final Configuration config = context.getConfiguration();&nbsp; &nbsp; LoggerConfig loggerConfig = config.getLoggerConfig("loggerName");&nbsp; &nbsp; loggerConfig.removeAppender("CONSOLE");&nbsp; &nbsp; context.updateLoggers();}对于编程方法最重要的是SpringApplication必须先初始化上下文!否则配置的记录器不可见!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java