How to solve springboot encoding problem when collecting logs of springboot apps ?
When you want to use springboot, you would get this problem ( The log files contains not-properly-displayed characters for double-byte languages):
2020-09-01 16:24:19.467 INFO 4912 --- [container-6] '?????????1298?09?01?'
- SpringBoot 1.2.5
- JDK 1.8
You should set the log file encoding of springboot by adding this configurations to your command line:
Then start your springboot application in the command line:
/opt/jdk1.8.0_40/bin/java -Dfile.encoding=UTF-8 -Xms256m -Xmx1024m -Djava.library.path=./lib -classpath .... com.bswen.Application
Then you can check the logs file again:
2020-09-01 16:24:19.467 INFO 4912 --- [container-6] '正确09年01日'
Theory about this
According to this article:
Default Character encoding in Java or charset is the character encoding used by JVM to convert bytes into Strings or characters when you don’t define java system property “file.encoding”. Java gets character encoding by calling System.getProperty(“file.encoding”,”UTF-8”) at the time of JVM start-up. So if Java doesn’t get any file.encoding attribute it uses “UTF-8” character encoding for all practical purpose e.g. on String.getBytes() or Charset.defaultCharSet().