Logback格式简记

news2024/11/25 22:52:00

一、常见转换符

时间与日期

  • %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.xml
  config: file:logback-temp.xml

三、参考致谢

Chapter 3: Configuration

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1930180.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++报错已解决】 “Undefined Reference“

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 前言 在编译程序时&#xff0c;遇到 “Undefined Reference” 报错总是令人头疼。这个错误提示通常意味着编译器找不到某个符号…

【Linux系统编程】shell命令以及运行原理 Linux权限

目录 一、shell命令以及运行原理 二、Linux权限的概念 2.1创建用户 2.2切换用户 2.3删除用户 三、Linux权限管理 3.1文件访问者的分类&#xff08;人&#xff09; 3.2文件类型和问权限&#xff08;事物属性&#xff09; 3.2.1文件类型 3.2.2基本权限代表的作用 3.…

泛微E-Cology WorkflowServiceXml SQL注入漏洞复现(QVD-2024-26136)

0x01 产品简介 泛微e-cology是一款由泛微网络科技开发的协同管理平台,支持人力资源、财务、行政等多功能管理和移动办公。 0x02 漏洞概述 2024年7月,泛微官方发布了新补丁,修复了一处SQL注入漏洞。经分析,攻击者无需认证即可利用该漏洞,建议受影响的客户尽快修复漏洞。…

mysql的主从复制(含位点复制和GTID复制)的代码实例

提示&#xff1a; master主库ip地址&#xff1a;192.168.137.2 从库s1的ip地址&#xff1a;192.168.137.11 从库s2的ip地址&#xff1a;192.168.137.22 主从复制的原理&#xff1a; MySQL主从复制是一个异步的复制过程&#xff0c;主要是通过二进制日志&#xff08;binary …

百度人脸识别Windows C++离线sdk C#接入

百度人脸识别Windows C离线sdk C#接入 目录 说明 设计背景 • 场景特点&#xff1a; • 客户特点&#xff1a; • 核心需求&#xff1a; SDK 包结构 效果 代码 说明 自己根据SDK封装了动态库&#xff0c;然后C#调用。 功能接口 设计背景 • 场景特点&#xff1a; -…

PTA - 接收n个关键字参数

接收n个以关键字形式传入的参数&#xff0c;按格式输出。 函数接口定义&#xff1a; def print_info (**keyargs) 提示&#xff1a;keyargs为可变参数&#xff0c;其可接受若干个关键字形式的实参值&#xff0c;并将接收到的值组装为一个字典。 裁判测试程序样例&#xff1…

Linux相关命令和安装软件

1.Linux命令 1.1 搜索文件或目录的命令 find 目录 -name "名称" 注意&#xff1a;名称可以使用通配符 *1.2 查看所有进程命令 ps -ef1.3 查看指定内容在文件中 grep "内容" 文件名1.4 管道符 | 1.5 查看端口号 netstat -tunlp | grep 端口号option说明…

框架设计MVVM

重点&#xff1a; 1.viewmodel 包含model 2.view包含viewmodel,通过驱动viewmodel去控制model的数据和业务逻辑 // Test.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 //#include <iostream> #include <vector>using namespace std;#p…

Java - 程序员面试笔记记录 实现 - Part5

7.1 Struts 优点&#xff1a; 1. MVC模式实现了表现与逻辑的分离&#xff0c;扩展性高。 2. 提供页面导航功能&#xff0c;通过配置文件建立整个系统各部分之间的联系。 3. 集成了一些常用处理功能。 缺点&#xff1a; 1. 仅面向 Web 应用程序开发 2. Action 非线程安全…

项目方案:视频图像结构化分析技术在车辆和人体检测中的应用方案(视频公共安全领域的解决方案)

目录 一、视频结构化分析技术介绍 1、概述 2、定义 3、核心环节 4、应用领域 二、视频中车辆和人的结构化 1、需求 2、信息内容 3、功能说明 &#xff08;1&#xff09;信息智能识别功能 &#xff08;2&#xff09;智能检索功能 &#xff08;3&#xff09;数据统计…

鸿蒙语言基础类库:【@system.configuration (应用配置)】

应用配置 说明&#xff1a; 从API Version 7 开始&#xff0c;该接口不再维护&#xff0c;推荐使用新接口[ohos.i18n]和[ohos.intl]。本模块首批接口从API version 3开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import configurati…

LeetCode分发糖果(贪心思路分析)

题目描述 贪心思路 思路及解法 我们可以将「相邻的孩子中&#xff0c;评分高的孩子必须获得更多的糖果」这句话拆分为两个规则&#xff0c;分别处理。 左规则&#xff1a;当 ratings[i−1]<ratings[i] 时&#xff0c;i 号学生的糖果数量将比 i−1 号孩子的糖果数量多。 …

新书速览|Vue.js 3.x+Express全栈开发:从0到1打造商城项目

《Vue.js 3.xExpress全栈开发&#xff1a;从0到1打造商城项目》 1 本书内容 《Vue.js 3.xExpress全栈开发 : 从0到1打造商城项目》是一本详尽的全栈开发教程&#xff0c;旨在通过Vue.js和Express框架引导读者从零开始构建一个完整的电商项目。内容覆盖电商项目的基本结构&…

(c++)virtual关键字的作用,多态的原理(详细)

1.viirtual修饰的两种函数 virtual 修饰的函数有两种&#xff0c;一个是虚函数&#xff0c;一个是纯虚函数。 2.虚函数与纯虚函数的异同之处 1.虚函数与纯虚函数的相同之处 虚函数和纯虚函数都重写的一种&#xff0c;什么是重写呢&#xff1f;重写是指在子类中写和父类中返…

2024-07-15 Unity插件 Odin Inspector3 —— Button Attributes

文章目录 1 说明2 Button 特性2.1 Button2.2 ButtonGroup2.3 EnumPaging2.4 EnumToggleButtons2.5 InlineButton2.6 ResponsiveButtonGroup 1 说明 ​ 本文介绍 Odin Inspector 插件中有关 Button 特性的使用方法。 2 Button 特性 2.1 Button 依据方法&#xff0c;在 Inspec…

使用DHCP动态管理主机地址

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、动态主机地址管理协议 动态主机配置协议&#xff08;DHCP&#xff09;是一种基于UDP协议且仅限于在局域网内部使用的网络协议&#xff0c;主要用…

书生大模型第一关-Linux基础知识

1.闯关任务&#xff1a;关任务 完成SSH连接与端口映射并运行hello_world.py 首先SSH 命令连接进行转发 ssh -p 33704 rootssh.intern-ai.org.cn -CNg -L {本地机器_PORT}:127.0.0.1:{开发机_PORT} -o StrictHostKeyCheckingno在远程服务器上&#xff08;开发机&#xff09;运…

操作系统杂项(二)

目录 一、简述GDB常见的调试命令&#xff0c;什么是条件断点&#xff0c;多进程下如何调试 1、GDB调试 2、命令格式 3、条件断点 4、多进程下如何调试 二、简述什么是“大端小端”及如何判断 1、小端模式 2、大端模式 3、如何判断 三、简述进程调度算法有哪些 1、分…

iSCSI 网络存储服务部署

一、介绍 iSCSI &#xff08;Internet Small Computer System Interface&#xff09;&#xff0c;互联网小型计算机系统接口&#xff1b;iSCSI 是SCSI接口 与以太网技术相结合的新型存储技术&#xff0c;属于ip san的一种&#xff0c;可以用来在网络中传输 SCSI 接口的命令和数…

用户进入网站之后看一眼就跳走,你知道原因吗?

用户进入网站后立即离开的原因可能有很多&#xff0c;以下是一些可能的原因和相应的规避办法&#xff1a; 页面加载速度慢&#xff1a; 如果网站加载速度过慢&#xff0c;用户可能会感到不耐烦并离开。可以通过优化网站的代码和资源&#xff0c;使用浏览器缓存、CDN加速等技术…