当前位置: 首页 > news >正文

Logback格式简记

一、常见转换符

时间与日期

  • %d{pattern}:输出当前日期和时间。例如,%d{yyyy-MM-dd HH:mm:ss.SSS} 会输出 2024-07-11 15:34:55.123

日志级别

  • %level%p:输出日志级别,如 INFO, DEBUG, WARN, ERROR

日志信息

  • %msg%m:输出日志消息内容。
  • %C%class :输出类的全限定名。
  • %M%method:输出方法名。
  • %L%line:输出日志的代码所在行号。
  • %F%file:输出日志的代码所在文件名。如 Test.java

线程信息

  • %thread%t:输出产生日志的线程名称。

日志记录器

  • %logger{length}%c{length}:输出日志记录器的名称,可以指定长度。例如 %logger{3},如果记录器的全名小于或等于指定的长度(这里是 3),则完整显示。如果超过指定长度,Logback 会从左到右缩短包名,直到整个名称的长度不超过指定值或无法进一步缩短。

进程信息

  • ${PID}:输出当前进程的 ID。需要代码层面 System.setProperty("PID")

其他

  • %n:输出一个换行符。
  • %r:输出自应用启动到记录该日志事件所用的毫秒数。
  • %property{key}:输出配置文件中的属性。如 %property{os.name}%property{user.dir}
  • %ex%exception:即使不配置也默认开启的。输出异常及其堆栈信息。 %ex{5} 表示堆栈信息最大只输出5行
  • %nopex:不输出异常。
  • %caller:输出调用者信息,包括类名、方法名、文件名和行号。如 at top.meethigher.step1.Step1.main(Step1.java:28)

正则替换

  • %replace(pattern){regex, replacement}:例如 %replace(%msg){'password=\w+', 'password=*****'}

二、示例格式

常用格式

跟踪 org.springframework.boot.logging.logback.DefaultLogbackConfiguration 源码,可以查看到默认的日志格式

我自己常用的日志格式如下

%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID} --- [%15.15t] %-40.40logger{39} : %msg%n%ex{5}

解析

  1. %d{yyyy-MM-dd HH:mm:ss.SSS}

    • 含义:日期和时间
    • 格式:年-月-日 时:分:秒.毫秒
    • 示例:2023-07-12 14:30:15.123
  2. %5p

    • 含义:日志级别,右对齐,宽度为5个字符
    • 可能的值:ERROR, WARN, INFO, DEBUG, TRACE
    • 示例: INFO
  3. ${PID}

    • 含义:进程ID
    • 示例:System.setProperty("PID","111")
  4. [%15.15t]

    • 含义:线程名,右对齐,最小和最大宽度为15个字符
    • 示例:[ main]
  5. %-40.40logger{39}

    • 含义:记录器名称,左对齐,最小和最大宽度为40个字符。表示字段的最小和最大宽度均为40个字符。如果实际内容不足40个字符,会在右侧填充空格;如果超过40个字符,会截断显示。
    • {39} 表示如果名称超过39个字符,将进行缩写
    • 示例:com.example.MyClass
  6. %msg

    • 含义:日志消息内容
    • 示例:Application started successfully
  7. %n

    • 含义:换行符
  8. %ex{5}

    • 含义:异常堆栈跟踪,限制为5行

配置文件

提取出一套适用于自己的 logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 参考自 https://logback.qos.ch/manual/configuration.html  -->
<!-- 开启日志自动更新 -->
<configuration scan="true" scanPeriod="5 seconds"><!-- spring官方提供的日志渲染工具 --><conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/><conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/><conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/><!-- 可以读取spring中配置 -->
<!--    <springProperty scope="context" name="test" source="proxy.name"/>-->
<!--    <property name="LOG_HOME" value="${test}"/>--><!-- 可以读取System.getProperty -->
<!--    <property name="LOG_HOME" value="${PID}"/>--><!-- 可以写死数据 --><property name="LOG_HOME" value="logs"/><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><Target>System.out</Target><encoder><!-- spring默认日志格式 --><pattern>%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID}){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wEx</pattern><!-- 自定义简洁格式 -->
<!--            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID} -&#45;&#45; [%15.15t] %-40.40logger{39} : %msg%n%ex{5}</pattern>--><charset>utf-8</charset></encoder></appender><!--文件归档--><appender name="ARCHIVE"class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_HOME}/latest.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd,aux}/%d{yyyy-MM-dd-HH}.log</fileNamePattern><cleanHistoryOnStart>true</cleanHistoryOnStart></rollingPolicy><append>true</append><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID} --- [%15.15t] %-40.40logger{39} : %msg%n%ex{5}</pattern><charset>utf-8</charset></encoder></appender><!-- 减少部分日志 --><!-- 业务日志 --><!-- 此处配置优先级高于root --><logger name="top.meethigher.snipurl.utils.GlobalDecorator" level="DEBUG"/><logger name="org.hibernate" level="WARN"/><root level="INFO"><appender-ref ref="CONSOLE"/><appender-ref ref="ARCHIVE"/></root>
</configuration>

spring 中指定日志如下

logging:#config: classpath:logback-temp.xmlconfig: file:logback-temp.xml

三、参考致谢

Chapter 3: Configuration

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 026-GeoGebra中级篇-曲线(2)_极坐标曲线、参数化曲面、分段函数曲线、分形曲线、复数平面上的曲线、随机曲线、非线性动力系统的轨迹
  • SpringBoot增加网关服务
  • Linux发行版CentOS 8 利用Docker安装应用
  • 初谈Linux信号-=-信号的产生
  • Kafka Producer发送消息流程之消息异步发送和同步发送
  • 【整体介绍】HTML和JS编写多用户VR应用程序的框架
  • node.js的安装及学习(node/nvm/npm的区别)
  • 【闲聊】-Perl的基础语法
  • Python3 学习——基础语法2
  • pyinstall 打包基于PyQt5和PaddleOCR的项目为.exe
  • phpinfo
  • ubuntu24.04 linux bcm94352hmb 无线网卡(带蓝牙功能)无法连接蓝牙设备的解决办法
  • LINUX多进程相关
  • Hadoop3:HDFS存储优化之小文件归档
  • XML 编辑器:功能、选择与使用技巧
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • HTTP中GET与POST的区别 99%的错误认识
  • JavaWeb(学习笔记二)
  • mac修复ab及siege安装
  • MaxCompute访问TableStore(OTS) 数据
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Spring Boot快速入门(一):Hello Spring Boot
  • Vue2.x学习三:事件处理生命周期钩子
  • 大整数乘法-表格法
  • 机器学习学习笔记一
  • 聊聊redis的数据结构的应用
  • 什么软件可以剪辑音乐?
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 由插件封装引出的一丢丢思考
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​Spring Boot 分片上传文件
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • # linux 中使用 visudo 命令,怎么保存退出?
  • #etcd#安装时出错
  • #pragma pack(1)
  • $(function(){})与(function($){....})(jQuery)的区别
  • (11)MSP430F5529 定时器B
  • (4)Elastix图像配准:3D图像
  • (C语言)逆序输出字符串
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (七)glDrawArry绘制
  • (四)js前端开发中设计模式之工厂方法模式
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (状压dp)uva 10817 Headmaster's Headache
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET C# 操作Neo4j图数据库
  • .NET Core 中的路径问题
  • .NET Core引入性能分析引导优化
  • .NET 药厂业务系统 CPU爆高分析