You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java日志Appender格式指令查询及行号输出需求

日志格式占位符全解及行号动态输出方案

一、通用日志格式占位符列表(以主流Logback框架为例)

  • %d:输出日志事件的日期时间,可自定义格式,比如%d{yyyy-MM-dd HH:mm:ss.SSS}
  • %p / %level:输出日志级别(DEBUG/INFO/WARN/ERROR等),%-5p表示左对齐且占5个字符宽度
  • %c / %logger:输出日志记录器名称(通常是类的全限定名),可缩写,比如%c{1}只显示类名
  • %m / %msg / %message:输出日志消息内容
  • %n:输出换行符
  • %L:动态输出日志语句所在的代码行号(就是你要的指令)
  • %M:输出日志语句所在的方法名
  • %F:输出日志语句所在的文件名
  • %t / %thread:输出产生日志的线程名
  • %X{key}:输出MDC(映射诊断上下文)中指定key的值,用于多线程场景追踪请求
  • %ex / %exception:输出异常栈信息,%ex{short}只显示异常类和消息,%ex{full}显示完整栈
  • %replace():对输出内容做替换,比如%replace(%msg){'secret','***'}可屏蔽敏感信息

二、动态输出行号的配置方法

1. 常规控制台/文件日志配置

直接在pattern里加%L就行,比如:

logging.pattern.console = %d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %c:%L - %m%n

这样就能自动输出日志对应的代码行号,完全不用手动做栈追踪。

2. JSON格式日志配置(以Logback的JSON编码器为例)

如果要输出JSON格式日志,在logback-spring.xml这类配置文件里,用LogstashEncoder或JsonLayout配置行号字段:

方式一:用LogstashEncoder

<appender name="CONSOLE_JSON" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="net.logstash.logback.encoder.LogstashEncoder">
        <fieldNames>
            <timestamp>timestamp</timestamp>
            <level>level</level>
            <logger>logger</logger>
            <message>message</message>
            <lineNumber>line_number</lineNumber> <!-- 开启行号字段 -->
            <method>method</method> <!-- 可选,输出方法名 -->
            <fileName>file_name</fileName> <!-- 可选,输出文件名 -->
        </fieldNames>
    </encoder>
</appender>

方式二:用JsonLayout

<appender name="CONSOLE_JSON" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
        <jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter"/>
        <appendLineSeparator>true</appendLineSeparator>
        <includes>timestamp, level, logger, message, lineNumber, method, fileName</includes>
    </layout>
</appender>

配置后生成的JSON日志里会自动带上line_number字段,值就是日志语句的行号。

注意点

  • %L这类获取代码位置的指令会有一定性能损耗,因为要读取栈信息,生产环境如果对性能要求高,建议只在DEBUG级别开启,或者谨慎使用。
  • 不同日志框架的占位符差异不大,比如Log4j2的行号指令也是%L,但老旧框架可能有区别,尽量用当前主流的Logback/Log4j2。

内容的提问来源于stack exchange,提问作者Urman Ratneshwar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 16:00:58