为什么log4j2在Windows Bash控制台中丢弃错误



早上好,

在我的项目中使用log4j2(请参见在配置下方)运行它,Eclipse中的一切都可以。然后构建罐子并在bash窗口中执行,我会发现"控制台appender"的错误。经过调查后,它在其他外壳(例如git bash)中起作用,我的问题是在某个地方记录了这种行为吗?

我的log4j2.properties:

   name=PropertiesConfig
   property.directory = ./logs
   appenders = console, file, testFile
   appender.console.type = Console
   appender.console.target =SYSTEM_OUT
   appender.console.name = STDOUT
   appender.console.layout.type = PatternLayout
   appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} line %L - %msg%n
   appender.file.type = File
   appender.file.append = false
   appender.file.name = LOGFILE
   appender.file.fileName=${directory}/neoswitcher-${date:yyyy-MM-dd-HH-mm-ss}.log
   appender.file.layout.type=PatternLayout
   appender.file.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
   appender.testFile.type = File
   appender.testFile.append = false
   appender.testFile.name = LOGTestFILE
   appender.testFile.fileName=${directory}/test-suite-${date:yyyy-MM-dd-HH-mm-ss}.log
   appender.testFile.layout.type=PatternLayout
   appender.testFile.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
   loggers=file
   logger.file.name=org.test.controller.core
   logger.file.level = info
   logger.file.appenderRefs = file
   logger.file.appenderRef.file.ref = LOGFILE
   loggers=file
   logger.testFile.name=org.simpleperftests.core;
   logger.testFile.level = info
   logger.testFile.appenderRefs = testFile
   logger.testFile.appenderRef.file.ref = LOGTestFILE
   rootLogger.level = info
   rootLogger.appenderRefs = stdout, file, testFile
   rootLogger.appenderRef.stdout.ref = STDOUT
   rootLogger.appenderRef.file.ref = LOGFILE
   rootLogger.appenderRef.testFile.ref = LOGTestFILE

以及MS-DOS控制台中发生的错误:

2017-02-24 10:55:11,994 main ERROR Unable to inject fields into builder class for plugin type class org.apache.logging.log4j.core.appender.ConsoleAppender, element Cons
ole. java.nio.charset.UnsupportedCharsetException: sun.stdout.encoding
        at java.nio.charset.Charset.forName(Charset.java:531)
        at org.apache.logging.log4j.util.PropertiesUtil.getCharsetProperty(PropertiesUtil.java:146)
        at org.apache.logging.log4j.util.PropertiesUtil.getCharsetProperty(PropertiesUtil.java:134)
        at org.apache.logging.log4j.core.appender.ConsoleAppender$Target.getCharset(ConsoleAppender.java:85)
        at org.apache.logging.log4j.core.appender.ConsoleAppender$Target$1.getDefaultCharset(ConsoleAppender.java:71)
        at org.apache.logging.log4j.core.appender.ConsoleAppender$Builder.build(ConsoleAppender.java:218)
        at org.apache.logging.log4j.core.appender.ConsoleAppender$Builder.build(ConsoleAppender.java:185)
        at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:122)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:952)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:892)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:884)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:508)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:232)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:244)
        at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545)
        at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:617)
        at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:634)
        at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:229)
        at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:152)
        at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
        at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
        at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:551)
        at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:537)
        at org.test.controller.core.App.<clinit>(App.java:14)
2017-02-24 10:55:12,001 main ERROR Unable to invoke factory method in class class org.apache.logging.log4j.core.appender.ConsoleAppender for element Console. java.lang.
IllegalStateException: No factory method found for class org.apache.logging.log4j.core.appender.ConsoleAppender
        at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.findFactoryMethod(PluginBuilder.java:224)
        at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:130)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:952)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:892)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:884)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:508)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:232)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:244)
        at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545)
        at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:617)
        at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:634)
        at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:229)
        at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:152)
        at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
        at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
        at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:551)
        at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:537)
        at org.test.controller.core.App.<clinit>(App.java:14)
2017-02-24 10:55:12,012 main ERROR Null object returned for Console in Appenders.
2017-02-24 10:55:12,012 main ERROR Unable to locate appender "STDOUT" for logger config "root"

编辑:实际上在Linux上可以使用该版本

使用快照版本(版本2.8.1-snapshot)测试后,该错误已修复。

log4j2的快照版本可在此存储库中找到:https://repository.apache.org/content/repositories/snapshots/

使用版本2.8.1而不是2.8.0似乎解决了我的问题

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.8.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.8.1</version>
        </dependency>

i在Windows命令ProMT中也遇到了相同的问题。我尝试了git bash,它照常工作正常。

因此,安装git bash并尝试进行git bash,它应该可以正常工作。

最新更新