Logback Кодировка символов
Вы можете использовать <charset>
в определении вашего PatternLayoutEncoder
, как это подкласс LayoutWrappingEncoder
, который предоставляет метод setCharset
. Это указывается в документации по выдержке из класса, но никакой конфигурации xml не указывается. Для LayoutWrappingEncoder ответ дан здесь: [Logback-user]: How to use UTF-8.
Таким образом, если вы настроите код, вы можете вызвать метод setCharset
с UTF-8. Или, если вы настраиваете через XML это:
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<charset>UTF-8</charset>
<outputPatternAsHeader>true</outputPatternAsHeader>
<pattern>[%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
Кодировка по умолчанию файла
документация Logback верна в том, что используется кодировка символов по умолчанию. Набор символов по умолчанию, как правило, не UTF-8 для окон (например, шахта windows-1252
). Правильная вещь, чтобы сделать это, настраивает logback как UTF-8, как указано выше. Даже если logback выбирает UTF-8 где-то, или file.encoding
как-то устанавливается вами, нет никакой гарантии, что это произойдет в будущем.
Кстати ВС ранее говорил о file.encoding, если вы устанавливаете это на Oracle VM:
Свойство «file.encoding» не требуется спецификацией J2SE платформы; это внутренняя деталь реализаций Sun и не должна быть проверена или изменена кодом пользователя. Он также предназначен для чтения только для чтения; технически невозможно поддерживать настройку этого свойства на произвольные значения в командной строке или в любое другое время во время выполнения программы.
Затмение и Maven
Если вы работаете в Maven от затмения, и вы уже установили свою среду, чтобы быть UTF-8 или в для окружающей среды/проекта или конфигурации Run (для меня в общая вкладка), то затмение будет обеспечивать, чтобы новая JVM имела кодировку UTF-8, установив file.encoding
. См: по умолчанию кодировка Eclipse's encoding documentation
Похоже, вы получаете это случайно. Я просмотрел исходный код и не смог найти классы, называющие setCharset в PatternLayoutEncoder. В документации указывается «кодировка кодировки, выбранная пользователем», что уже описано в [this] (http://stackoverflow.com/a/13841592/3080094). – vanOekel
Но как это «случайно» работает? Я на компьютере с Windows --- откуда он получает UTF-8? Это должно произойти откуда-то. –
Кодировка по умолчанию (используемая через 'getBytes()' в 'LayoutWrappingEncoder') - это [бит сложный] (http://stackoverflow.com/a/12659462/3080094), но [не тайна] (http: // superuser.com/a/879947). Ссылки могут помочь определить, откуда идет UTF-8? – vanOekel