Log4j2程序性替代

时间:2018-11-09 15:08:24

标签: java log4j2

我正在尝试以编程方式即时覆盖我的log4j2记录器的级别,但似乎没有用。谁能指出我可能做错了什么?这是我目前用来尝试重置级别的代码。

 final static Level REQUEST = Level.forName("REQUEST", 450);
 errorLog.info("Showing Requests in logs");
 LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
                        Configuration config = ctx.getConfiguration();
 LoggerConfig loggerConfig = config.getLoggerConfig("console");
 loggerConfig.setLevel(REQUEST);
 LoggerConfig loggerConfigFile = config.getLoggerConfig("file-log");
 loggerConfigFile.setLevel(REQUEST);
 ctx.updateLoggers();

我的配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
    <Properties>
        <Property name="log-path">logs</Property>
    </Properties>
    <Appenders>
        <RollingFile name="file-log" fileName="${log-path}/DataAdapter.log"
        filePattern="${log-path}/DataAdapter-%d{yyyy-MM-dd}.log">
            <PatternLayout>
                <pattern>[%-5level] %d{MM-dd-yyyy HH:mm:ss} [%t] %c{1} - %msg%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
        </RollingFile>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="[%-5level] %d{MM-dd-yyyy HH:mm:ss} %c{1} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="joy.com.DataAdapter" level="trace" additivity="false">
            <appender-ref ref="file-log" level="info"/>
        </Logger>
        <Root level="trace" additivity="false">
            <appender-ref ref="console" level="info"/>
            <appender-ref ref="file-log" level="info"/>
        </Root>
    </Loggers>
</Configuration>

1 个答案:

答案 0 :(得分:0)

我终于明白了。每个appender-ref中都有level =“”

 <Root level="trace" additivity="false">
            <appender-ref ref="console" level="info"/>
            <appender-ref ref="file-log" level="info"/>
        </Root>

覆盖了我的程序设置。删除它们使我可以从代码中设置级别。

 <Root level="info" additivity="false">
            <appender-ref ref="console"/>
            <appender-ref ref="file-log"/>
        </Root>