From e4e1958b6545b82a356ab902ec0df9f3e68f55cb Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 29 Oct 2021 14:40:05 +0100 Subject: [PATCH] Make Logback fall back to JVM's default charset The charset "default" is an alias for US-ASCII, not the JVM's default charset. This commit updates the built-in Logback configuration to use Charset.defaultCharset().name() in place of "default" in the Java-based configuration. In the XML-based configuration where Charset.defaultCharset().name() cannot be called, we emulate its behaviour [1] by using the file.encoding system property, falling back to UTF-8 when it's not set. Fixes gh-27230 [1] https://github.com/openjdk/jdk8u/blob/19be6113dd0f658f950583b751284961d8ce0458/jdk/src/share/classes/java/nio/charset/Charset.java#L604-L617 --- .../logging/logback/DefaultLogbackConfiguration.java | 9 ++++++--- .../springframework/boot/logging/logback/defaults.xml | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/DefaultLogbackConfiguration.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/DefaultLogbackConfiguration.java index e49f7e2cb4b6..4bd530964fe0 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/DefaultLogbackConfiguration.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/DefaultLogbackConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2020 the original author or authors. + * Copyright 2012-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -72,11 +72,14 @@ private void defaults(LogbackConfigurator config) { + "%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) " + "%clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} " + "%clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}")); - config.getContext().putProperty("CONSOLE_LOG_CHARSET", resolve(config, "${CONSOLE_LOG_CHARSET:-default}")); + String defaultCharset = Charset.defaultCharset().name(); + config.getContext().putProperty("CONSOLE_LOG_CHARSET", + resolve(config, "${CONSOLE_LOG_CHARSET:-" + defaultCharset + "}")); config.getContext().putProperty("FILE_LOG_PATTERN", resolve(config, "${FILE_LOG_PATTERN:-" + "%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] " + "%-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}")); - config.getContext().putProperty("FILE_LOG_CHARSET", resolve(config, "${FILE_LOG_CHARSET:-default}")); + config.getContext().putProperty("FILE_LOG_CHARSET", + resolve(config, "${FILE_LOG_CHARSET:-" + defaultCharset + "}")); config.logger("org.apache.catalina.startup.DigesterFactory", Level.ERROR); config.logger("org.apache.catalina.util.LifecycleBase", Level.ERROR); config.logger("org.apache.coyote.http11.Http11NioProtocol", Level.WARN); diff --git a/spring-boot-project/spring-boot/src/main/resources/org/springframework/boot/logging/logback/defaults.xml b/spring-boot-project/spring-boot/src/main/resources/org/springframework/boot/logging/logback/defaults.xml index 13d78c5251c6..2b63702f166c 100644 --- a/spring-boot-project/spring-boot/src/main/resources/org/springframework/boot/logging/logback/defaults.xml +++ b/spring-boot-project/spring-boot/src/main/resources/org/springframework/boot/logging/logback/defaults.xml @@ -10,9 +10,9 @@ Default logback configuration provided for import - + - +