java - 为什么 Log4j2 在 Windows bash 控制台中抛出错误

标签 java windows bash log4j2

早上好,

在我的项目中使用log4j2(见下面的配置)运行它,在Eclipse中一切正常。然后构建 jar 并在 bash Windows 中执行它,我收到有关“Console Appender”的错误。经过调查,它可以在其他 shell(如 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/

关于java - 为什么 Log4j2 在 Windows bash 控制台中抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42435814/

相关文章:

java - 关于序列化、serialVersionUID、类不兼容

java - 无需安装即可设置java版本的批处理文件

python - 使用从第一列派生的关系从两列文件的第二列构造边列表

linux - 如何检查 XFCE 中的任何窗口是否最大化?

java - Ajax 请求 Spring REST api 415 错误

java - System.identityHashCode 逆?

java - 服务方法参数、对象标识符与对象引用

windows - 我的 Windows Cordova 应用程序中的 ActivateApplication 错误

c++ - C++ 和共享库中的代码执行点

c - GCC 无法在 Linux 中编译