logback.xml中常见占位符和含义

492 阅读3分钟

背景

在编写logback.xml文件的时候,pattern元素中,用到了很多占位符,有的不太清楚是什么意思,于是,查询了下 做个总结

常见的 pattern 占位符

以下是一些常用的占位符及其含义:

占位符含义
%d日志记录的时间戳,默认格式为 yyyy-MM-dd HH:mm:ss,SSS,可以通过 {format} 指定自定义格式。
%level日志级别(如 DEBUGINFOWARNERROR)。
%thread线程名称,等同于 %t
%logger日志记录器的名称,可以使用 {length} 限制显示长度,例如 %logger{36}
%msg日志消息,等同于 %m
%n换行符。
%class记录日志的类名。
%method记录日志的方法名。
%file记录日志的文件名。
%line记录日志的行号。
%X{key}MDC(Mapped Diagnostic Context)中的键值对,用于存储和检索上下文信息。

logback<pattern> 的含义

logback 配置文件中,<encoder> 元素用于定义日志输出的格式,而 <pattern> 子元素则指定了具体的日志输出模式。<pattern> 使用占位符(Placeholders)来表示不同的日志信息字段,这些占位符会被实际的日志数据替换。

举例:

<pattern>%date{HH:mm:ss} [%t] %logger - %m%n</pattern>

详解:

1. %date{HH:mm:ss}:日期和时间

  • 含义:表示日志记录的时间戳,格式为 HH:mm:ss,即小时、分钟和秒。
  • HH:24 小时制的小时(00-23)。
  • mm:分钟(00-59)。
  • ss:秒(00-59)。
  • {HH:mm:ss}:指定时间的格式。你可以根据需要调整格式,例如:
    • %date{yyyy-MM-dd HH:mm:ss}:完整的日期和时间。
    • %date{HH:mm:ss.SSS}:包含毫秒的时间。

2. [%t]:线程名称

  • 含义:表示记录日志时所在的线程名称,用方括号 [] 包围。
  • %t:线程名称的占位符。
  • 示例:如果日志是在 main 线程中记录的,输出将会是 [main];如果是在 pool-1-thread-2 线程中记录的,输出将会是 [pool-1-thread-2]

3. %logger:日志记录器的名称

  • 含义:表示记录日志的 Logger 对象的名称。通常是你在代码中使用 LoggerFactory.getLogger() 方法传入的类名或自定义名称。
  • %logger:日志记录器名称的占位符。
  • 示例:如果你使用 LoggerFactory.getLogger(MyClass.class),那么输出将会是 MyClass

4. %m:日志消息

  • 含义:表示实际的日志消息内容,即你在代码中通过 logger.info()logger.debug() 等方法传递的消息字符串。
  • %m:日志消息的占位符。
  • 示例:如果你调用 logger.info("This is a log message"),那么输出将会是 This is a log message

5. %n:换行符

  • 含义:表示换行符,确保每条日志记录都从新的一行开始。
  • %n:换行符的占位符。它会根据操作系统的不同自动选择合适的换行符(例如,在 Windows 上是 \r\n,在 Unix/Linux 上是 \n)。

完整的 pattern 解释

<pattern>%date{HH:mm:ss} [%t] %logger - %m%n</pattern>

将生成类似以下的日志输出:

14:35:42 [main] com.example.MyClass - This is a log message
  • 14:35:42:记录日志的时间,格式为小时、分钟和秒。
  • [main]:记录日志的线程名称。
  • com.example.MyClass:记录日志的 Logger 名称。
  • This is a log message:实际的日志消息。
  • 换行符:确保每条日志记录都从新的一行开始。

示例:更复杂的 pattern

你可以根据需要调整 pattern,以包含更多的日志信息。例如,添加日志级别和文件名/行号:

<pattern>%date{HH:mm:ss} [%thread] %-5level %logger{36} - %msg (%file:%line)%n</pattern>

这将生成类似以下的日志输出:

14:35:42 [main] INFO  com.example.MyClass - This is a log message (MyClass.java:42)
  • %-5level:日志级别,宽度为 5 个字符,左对齐。如果没有 5 个字符,右边会补空格。
  • %file:%line:记录日志的文件名和行号。

总结

  • <pattern>logback 中用于定义日志输出格式的关键配置项。
  • 你可以使用各种占位符来控制日志输出的内容,常见的占位符包括 %date%thread%logger%msg%n
  • 通过合理配置 pattern,你可以生成符合项目需求的日志格式,便于调试和分析。