Я использую logback (SiftingAppender и RollingFileAppender) в своем приложении.Всякий раз, когда поступают запросы, они будут записываться в разные файлы в соответствии с идентификатором из URL-запроса.
Это работает очень хорошо, и я получаю ожидаемый результат.Тем не менее, я иногда замечал, что в середине логов есть несколько нулевых символов.Я не уверен, почему это происходит и как его уменьшить.
Я провел некоторое исследование, и самое близкое, что я нашел, это https://serverfault.com/questions/71341/why-do-jboss-and-logrotate-create-log-files-full-of-nul-characters
Они используют logrotate с log4j, и это приводит кнулевой символОднако в моем случае весь поворот журнала и жизненный цикл обрабатываются с помощью logback.
Это часть моей конфигурации xml logback:
<appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<key>id</key>
<defaultValue>main</defaultValue>
</discriminator>
<sift>
<appender name="${id}Rolling" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${logRoot}/${id}.%d{"yyyy-MM-dd-HH", UTC}.%i.json</fileNamePattern>
<maxFileSize>${logSizeLimit}</maxFileSize>
<maxHistory>100</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
</sift>
И вкод Java:
String jsonOutput = gson.toJson(ping);
MDC.put("id", id));
logger.info(jsonOutput);
MDC.remove("id");
Выходной журнал выглядит следующим образом:
{"отметка времени": {"секунд": 1557048143, "нанос": 028000000}, "httpRequest": {"status": 200," remoteIp ":" 111.11.111.111 "," requestMethod ":" GET "," requestUrl ":" https://my.example.com/?id=testid","userAgent":"Mozilla/5.0 "}} ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ { "метка": { "секунд": 1557041043, "Nanos": 318000000}," httpRequest ": {" status ": 200," remoteIp ":" 111.11.111.111 "," requestMethod ":" GET "," requestUrl ":" https://my.example.com/?id=testid","userAgent":"Mozilla/5.0 "}}
Я использую vim, чтобы открыть его, поэтому он отображает нулевой символ как^ @.Эти нулевые символы добавляются в начале реального сообщения журнала.Я не нашел шаблон, когда это произойдет.Я ожидаю нормальных логов без этих нулевых символов.