dockerfiles-windows icon indicating copy to clipboard operation
dockerfiles-windows copied to clipboard

UnsupportedCharsetException cp65001 [Question]

Open AndyPook opened this issue 8 years ago • 5 comments

I've been trying to update the elasticsearch docker file to use es-5.5.1 Unfortunately some change to log4j is tripping over the windows codepage (see below). log4j 2.8.1 should have a fix but I see es-5.5 use 2.8.2. I've tried many things with both windowscore and nanoserver but to no avail.

I'm hoping that someone will "just know" what the magic incantation might be?

Thanks in advance

2017-07-29 19:36:23,185 main ERROR Unable to inject fields into builder class for plugin type class org.apache.logging.l
og4j.core.appender.ConsoleAppender, element Console. java.nio.charset.UnsupportedCharsetException: cp65001
        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.start(LoggerContext.java:261)
        at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:166)
        at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:122)
        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:316)
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:123)
        at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:114)
        at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:67)
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:122)
        at org.elasticsearch.cli.Command.main(Command.java:88)
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91)
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84)

2017-07-29 19:36:23,200 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.logg
ing.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.start(LoggerContext.java:261)
        at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:166)
        at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:122)
        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:316)
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:123)
        at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:114)
        at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:67)
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:122)
        at org.elasticsearch.cli.Command.main(Command.java:88)
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91)
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84)

2017-07-29 19:36:23,200 main ERROR Null object returned for Console in Appenders.
2017-07-29 19:36:23,200 main ERROR Unable to locate appender "STDOUT" for logger config "root"

AndyPook avatar Jul 29 '17 18:07 AndyPook

I just bumped on the exact same issue.

It seems the codepage returned by CMD is not supported by log4j: https://issues.apache.org/jira/browse/LOG4J2-1888

This is a different problem than the one described here: https://stackoverflow.com/questions/42435814/why-is-log4j2-throwing-an-error-in-windows-bash-console (which is indeed fixed in 2.8.1)

Changing the codepage via chcp doesn't work.

I'm trying now to set the character set via the log4j.properties file.

ffosselle avatar Jul 30 '17 19:07 ffosselle

Adding these two lines to the jvm.options file will do the trick:

Add-Content 'c:\elasticsearch\config\jvm.options' "`n-Dsun.stdout.encoding=UTF-8" ; \
Add-Content 'c:\elasticsearch\config\jvm.options' "`n-Dsun.err.encoding=UTF-8" ; \

ffosselle avatar Jul 31 '17 13:07 ffosselle

Thanks @ffosselle. Can you capture that in the log4j file, or does it need to be in the JVM config?

sixeyed avatar Jul 31 '17 15:07 sixeyed

@ffosselle splendid, thank you. I can confirm that works nicely for me.

Had a closer look at elasticsearch.bat. I can also confirm that adding ENV ES_JAVA_OPTS="-Dsun.stdout.encoding=UTF-8 -Dsun.err.encoding=UTF-8" works too.

The contents of the jvm.options file are concatenated into this var. Using the ENV line just gives it an initial value.

Choose which ever method floats your boat :)

AndyPook avatar Jul 31 '17 21:07 AndyPook

666

wmdny avatar Feb 02 '23 09:02 wmdny