Log4j2日志记录级别在Java 8和Java 11中变得不同

时间:2019-01-14 20:14:25

标签: log4j2

Log4j2版本2.11.0 / 2.11.1在Java 8应用程序中可以正常运行,但在Java 11中则不能正常运行

这是log4j2.xml的示例:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Properties>
        <Property name="log-path">C:\\MyTestXXXX\\EnterpriseLogs</Property>
    </Properties>

    <Appenders>
        <RollingFile name="MyTestOnly" fileName="${log-path}\ServerLog.log" filePattern="${log-path}\ServerLog_%d{yyyy-MM-dd}_%i.log" append="true">
            <PatternLayout>
                <Pattern>[#%d{HH:mm:ss}|%p|%m#]%n</Pattern>
            </PatternLayout>
            <Policies>
                <CronTriggeringPolicy schedule="0 0 0 * * ?" evaluateOnStartup="true"/>
                <SizeBasedTriggeringPolicy size="10 MB"/>
            </Policies>
            <DefaultRolloverStrategy/>
        </RollingFile>  
    </Appenders>

    <Loggers>
        <Logger name="OnlyLOG" additivity="true">
            <AppenderRef ref="MyTestOnly" level="ALL" />
        <Logger>

        <Root level="ALL" />
    </Loggers>
</Configuration>

在Java源代码中,我这样做: 导入org.apache.logging.log4j。*; 导入org.apache.logging.log4j.core.Logger;

...

// Get org.apache.logging.log4j.core.Logger
Logger logger = (Logger) LogManager.getLogger("OnlyLOG");
logger.log(Level.forName("INFO", 600), "Log this text now!", new Exception("xxxxxx"));

在Java 8中运行,我可以看到serverLog.log具有内容,这很好。 在Java 11中运行,没有日志。

通过进一步的研究(调试),我发现这一行很有趣:

Logger logger = (Logger) LogManager.getLogger("OnlyLOG");

执行后,在Java 8中,记录器类似于“ 2f333739中的ALL”,并且记录很好。 但是在Java 11中,记录程序类似“ 2f333739中的错误”,并且没有日志。显然,级别变为“错误”,而不是“全部”。

因此,我在Java 11中尝试了此方法:

Level loggerLevel = logger.getLevel(); // Obviously it is ERROR level
logger.log(loggerLevel, "Log this text now!", new Exception("xxxxxx"));

日志发生在控制台中(可能通过Root),而不是在Log4j2.xml中为Logger OnlyLOG配置的ServerLog.log中。

那么,是什么引起Java 8和Java 11之间的级别差异?换句话说,应该进行哪些修改,以便在Java 11中,日志仍然可以与Java 8中的日志相同地工作?

1 个答案:

答案 0 :(得分:0)

问题已解决。这是原因。 我添加了一个新的Eclipse IDE来运行Java 11,添加项目时,我将lib文件夹添加到类路径中,因为log4j2.xml位于lib文件夹中。现在,我再次检查了IDE配置,发现lib文件夹不在类路径中。第二次尝试后,配置正常,日志记录变得正常。

我通过在Eclipse IDE中添加一个全新的项目进行了第二次测试。有趣的是,在将lib文件夹添加到类路径时,确实我不得不尝试两次,因为第一次没有添加它。顺便说一句,该计算机运行Windows10。使用Windows 7中运行的计算机时不会发生这种情况。

无论如何,Log4j2在Java 8和Java 11中都能正常工作。