logback输出毫秒时间戳,添加converter解决

本文介绍了在logback中如何实现毫秒时间戳的输出。针对1.3版本前后的不同,提出了解决方案:在旧版本中通过自定义转换器并在配置文件中设置conversionWord,而在1.3版本及以后,可以直接使用%micros占位符来达到目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

在做项目开发的时候,内部提到一个技术需求:根据指定的格式输出链路日志。日志里面就有时间戳数据。

设计开发的过程中,添加一个appender作为链路日志输出专用。

需求:

在专用的appender的encoder,需要按照如下格式输出毫秒时间戳,%timestamp代表毫秒时间戳占位符。

<encoder>
    <pattern>%timestamp| xxxxxx.xxx</pattern>
</encoder>

解决方案:

  • 在logback1.3之前,添加一个转换器

    public class TimeStampConverter extends ClassicConverter {
        @Override
        public String convert(ILoggingEvent event) {
            return String.valueOf(System.currentTimeMillis());
        }
    }
    

    同时,在 logback-base.xml这种logback的配置文件中,添加如下\<conversionRule>:

    <include>
       <!-- 这里是其他配置 -->
        <conversionRule conversionWord="timestamp"  converterClass="com.x.TimeStampConverter" />
       <!-- 这里是其他配置 -->
    </include>
    

    conversionWord=“timestamp” 这个 “timestamp"就可以被logback识别了,这样就能够按照下面种方式输出时间戳。

    <encoder>
        <pattern>%timestamp| xxxxxx.xxx</pattern>
    </encoder>
    
    • 经过查询资料,在logback 1.3之前的版本(不包括1.3)是不支持毫秒时间戳的输出的,因此可以直接以%msg的方式从 logger.info等方法中获取。

    • logback 1.3版本之后,可以以占位符 %micros 进行毫秒时间戳的输出。

      参考连接: https://logback.qos.ch/manual/layouts.html#conversionWord

### logback 输出乱码的解决方案 logback输出乱码的主要原因是字符编码不一致,尤其是在不同操作系统环境下运行程序时更容易出现问题。以下是针对该问题的具体分析和解决方案。 #### 1. 配置 Logback 的编码方式 在 `logback.xml` 或 `logback-spring.xml` 中配置 `<encoder>` 节点的 `charset` 属性,显式指定编码为 UTF-8。这样可以确保日志文件以统一的编码格式保存[^3]。 ```xml <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>logs/app.log</file> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 显式设置编码 --> </encoder> </appender> ``` #### 2. 检查操作系统的字符集 如果应用程序部署在 Linux 环境下,需确认服务器的操作系统字符集是否正确。执行以下命令检查: ```bash locale ``` 观察返回结果中的 `LANG` 属性值。如果有问题的服务器显示为 `en_US.UTF-8`,而正常工作的服务器显示为 `zh_CN.UTF-8`,则可能是因为字符集差异引起的乱码问题。可以通过修改环境变量来调整字符集: ```bash export LANG=zh_CN.UTF-8 ``` #### 3. JVM 参数设置 在启动 Java 应用程序时,可通过 `-Dfile.encoding=UTF-8` 参数强制指定 JVM 使用 UTF-8 编码。这有助于避免因默认编码不一致而导致的日志乱码问题[^1]。 ```bash java -Dfile.encoding=UTF-8 -jar your-application.jar ``` #### 4. 数据源层的编码一致性 当涉及数据库操作时,也需要确保数据源连接使用的编码与数据库表字段定义保持一致。例如,在 MySQL 连接 URL 中添加参数 `useUnicode=true&characterEncoding=UTF-8` 可以防止潜在的编码冲突。 --- ### 总结 通过以上方法可以从多个层面解决 logback 日志输出乱码的问题。优先推荐在 `logback.xml` 中明确指定编码属性,并结合操作系统的字符集配置以及 JVM 启动参数共同作用,从而彻底消除乱码现象。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值