【问题标题】:Unreadable thread name in logs with Logback使用 Logback 的日志中不可读的线程名称
【发布时间】:2020-10-26 07:02:42
【问题描述】:

我运行 Spring Boot 应用程序并具有以下 logback-spring.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <property name="LOGS" value="./logs" />

    <appender name="Console"
              class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable
            </Pattern>
        </layout>
    </appender>

    <appender name="RollingFile"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOGS}/logger.log</file>
        <encoder
                class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <charset>UTF-8</charset>
            <Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
        </encoder>

        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily and when the file reaches 10 MegaBytes -->
            <fileNamePattern>${LOGS}/archived/logger-%d{yyyy-MM-dd}.%i.log
            </fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>

    <!-- LOG everything at INFO level -->
    <root level="info">
        <appender-ref ref="RollingFile" />
        <appender-ref ref="Console" />
    </root>
</configuration>

默认 Spring Boot 日志可以正常工作:

2020-07-06 10:24:02,276 INFO  [restartedMain] org.springframework.boot.SpringApplication: No active profile set, falling back to default profiles: default

但是当应用尝试记录传入信息时,我会得到:

2020-07-06 10:24:24,604 INFO  [Áèáëèîòåêà èãð Google Play Telegram Executor] ru.miroha.bot.GooglePlayGameBot: Hello, Test!

在控制台和文件中相同。

Google Play Telegram Executor 是合法的,但 Áèáëèîòåêà èãð 是什么?

如果我删除此 logback.xml 配置并使用默认 Spring Bot 记录器运行,则此消息将如下所示:

2020-07-06 10:22:00.418  INFO 6796 --- [legram Executor] ru.miroha.bot.GooglePlayGameBot          : Hello!

怎么了?

【问题讨论】:

    标签: java spring-boot logging spring-logback


    【解决方案1】:

    编码文本来自您配置中的%C{1.}。也许你的对象的调用者故意混淆了类名?类是否从库中调用该行?

    您是否需要与%C{0} 相比,您想要记录的呼叫者记录的深度?

    关于来电记录的更多信息: http://logback.qos.ch/manual/layouts.html

    【讨论】:

    • 似乎它甚至不是错误的 logback 配置。我刚刚用java.lang.Thread 检查了线程名称,它返回了Áèáëèîòåêà èãð Google Play Telegram Executor。很有趣。
    • 是的,您在 Pattern 中拥有的 %C 正在记录调用者,其中一个调用者类包含未正确解码的文本。配置是有效的,但只是堆栈上的调用者不会显示您想要的方式。
    【解决方案2】:

    我发现了真正的问题。此线程名称包含我的电报机器人名称(我猜是 api 功能),并且此 api 无法正确处理西里尔字母。

    【讨论】:

      猜你喜欢
      • 2011-08-20
      • 2015-11-25
      • 2020-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多