logback.xml 常用配置详解 - Higurashi

一、参考文档

  1. Logback 官方文档
  2. Logback 博客文档

二、logback.xml常用配置详解

以下是logback.xml常用节点结构图:

img

1. 根节点<configuration>

<configuration>是 Logback 配置文件的根节点,包含以下三个重要属性:

  • scan:当此属性设置为true时,Logback 将监测配置文件是否发生改变。如果配置文件被修改,它将自动重新加载。默认值为true
  • scanPeriod:设置监测配置文件是否有修改的时间间隔。如果没有指定时间单位,默认单位为毫秒。此属性在scan设置为true时生效。默认的时间间隔为 1 分钟。
  • debug:当此属性设置为true时,Logback 将打印其内部日志信息,帮助开发者实时查看 Logback 的运行状态。默认值为false

示例:

<configuration scan="true" scanPeriod="60 seconds" debug="false"><!-- 其他配置省略 -->
</configuration>

2. 子节点<appender>

<appender>是负责将日志事件写入到目的地的组件,它有两个必要属性:nameclassname指定 Appender 的名称,class指定 Appender 的全限定类名。

下文仅简述常见的 Appender,其他更专业的 Appender 使用方式请参考 Logback 官方文档。

2.1 ConsoleAppender:将日志输出到控制台

ConsoleAppender具有以下子节点:

  • <encoder>:用于对日志事件进行格式化。
  • <target>:指定日志输出的目标流,可以是System.out(默认值)或System.err

示例:DEBUG及以上级别的日志输出到控制台

<configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern></encoder></appender><root level="DEBUG"><appender-ref ref="STDOUT" /></root>
</configuration>

2.2 FileAppender:将日志添加到文件

FileAppender具有以下子节点:

  • <file>:指定日志写入的文件名,可以是相对路径或绝对路径。如果上级目录不存在,Logback 会自动创建。此节点没有默认值。
  • <append>:如果设置为true,日志将被追加到文件末尾;如果设置为false,则在每次启动时清空现有文件。默认值为true
  • <encoder>:用于对日志事件进行格式化。
  • <prudent>:如果设置为true,日志会被安全地写入文件,即使有其他FileAppender也在向此文件写入。这会降低效率,默认值为false

示例:DEBUG及以上级别的日志输出到testFile.log

<configuration><appender name="FILE" class="ch.qos.logback.core.FileAppender"><file>testFile.log</file><append>true</append><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern></encoder></appender><root level="DEBUG"><appender-ref ref="FILE" /></root>
</configuration>

2.3 RollingFileAppender:滚动记录文件

RollingFileAppender能够先将日志记录到指定文件,当满足特定条件(如时间或文件大小)时,将日志滚动到其他文件。它具有以下子节点:

  • <file>:被写入的文件名,可以是相对或绝对路径。如果上级目录不存在会自动创建,没有默认值。
  • <append>:如果为true,日志被追加到文件结尾;如果为false,清空现存文件。默认是true
  • <rollingPolicy>:决定RollingFileAppender在发生滚动时的行为,涉及文件的移动和重命名。其class属性定义具体的滚动策略类。
  • <triggeringPolicy>:告知RollingFileAppender何时激活滚动。
2.3.1 TimeBasedRollingPolicy:基于时间的滚动策略

这是最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责触发滚动。其class属性值为ch.qos.logback.core.rolling.TimeBasedRollingPolicy。它有以下子节点:

  • <fileNamePattern>:必要节点,包含文件名及%d转换符。%d可以包含一个java.text.SimpleDateFormat指定的时间格式,例如%d{yyyy-MM}。如果直接使用%d,默认格式是yyyy-MM-dd
    • RollingFileAppender<file>子节点可以省略。如果设置了<file>,当前日志总是记录到<file>指定的文件(活动文件),活动文件的名字不会改变;如果未设置<file>,活动文件的名字会根据<fileNamePattern>的值,每隔一段时间改变一次。斜杠/或反斜杠 \ 会被当作目录分隔符。
  • <maxHistory>:可选节点,控制保留的归档文件的最大数量。超出数量的旧文件将被删除。例如,如果设置每月滚动且<maxHistory>为 6,则只保留最近 6 个月的文件,并删除更早的旧文件。在删除旧文件时,为归档而创建的目录也会被删除。
2.3.2 SizeBasedTriggeringPolicy:基于文件大小的触发策略

此策略用于查看当前活动文件的大小,如果超过指定大小,则会通知RollingFileAppender触发当前活动文件滚动。其class属性值为ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy。它只有一个节点:

  • <maxFileSize>:这是活动文件的最大大小,默认值是10MB
2.3.3 FixedWindowRollingPolicy:基于固定窗口的滚动策略

此策略根据固定窗口算法重命名文件。其class属性值为ch.qos.logback.core.rolling.FixedWindowRollingPolicy。它有以下子节点:

  • <minIndex>:窗口索引最小值。
  • <maxIndex>:窗口索引最大值。当用户指定的窗口过大时,会自动将窗口设置为 12。
  • <fileNamePattern>:必须包含%i,例如,假设最小值和最大值分别为 1 和 2,命名模式为mylog%i.log,会产生归档文件mylog1.logmylog2.log。还可以指定文件压缩选项,例如mylog%i.log.gzmylog%i.log.zip

示例: 每天生成一个日志文件,并保存 30 天的日志文件。

<configuration><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern></encoder></appender><root level="DEBUG"><appender-ref ref="FILE" /></root>
</configuration>

3. 子节点<logger>

<logger>用来设置特定包或类的日志打印级别,以及指定其使用的 Appender。

<logger>元素仅有一个name属性,一个可选的level属性和一个可选的additivity属性。它可以包含零个或多个<appender-ref>元素,表示将 Appender 添加到此 Logger。

  • name:用于指定受此 Logger 约束的包或具体的类。
  • level:用于设置打印级别,大小写不敏感:TRACE,DEBUG,INFO,WARN,ERROR,ALLOFF。还有一个特殊值INHERITED或其同义词null,代表强制继承上级的级别。如果未设置此属性,则当前 Logger 将继承其上级的级别。
  • additivity:是否向上级 Logger 传递打印信息。默认是true

4. 子节点<root>

<root>也是一个 Logger 元素,但它是根 Logger,是所有其他 Logger 的上级。它只有一个level属性,因为其name已固定为 "root",且已是最上级。

  • level:用于设置打印级别,大小写不敏感:TRACE,DEBUG,INFO,WARN,ERROR,ALLOFF。不能设置为INHERITEDnull。默认是DEBUG

<logger>一样,<root>可以包含零个或多个<appender-ref>元素,表示将 Appender 添加到此 Logger。

示例: 常用 Logger 配置

<!-- show parameters for hibernate sql 专为 Hibernate SQL 定制 -->
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" />
<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />
<logger name="org.hibernate.SQL" level="DEBUG" />
<logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
<logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" /><!-- MyBatis log configure -->
<logger name="org.apache.ibatis" level="TRACE"/>
<logger name="java.sql.Connection" level="DEBUG"/>
<logger name="java.sql.Statement" level="DEBUG"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>

5. 子节点<contextName>

<contextName>用于设置上下文名称。每个 Logger 都关联到一个 Logger 上下文,默认上下文名称为default。可以使用<contextName>设置成其他名称,用于区分不同应用程序的日志记录。一旦设置,上下文名称不能修改。

示例:

<configuration scan="true" scanPeriod="60 seconds" debug="false"><contextName>myAppName</contextName><!-- 其他配置省略 -->
</configuration>

6. 子节点<property>

<property>用于定义变量值,它有两个属性namevalue。通过<property>定义的值会被插入到 Logger 上下文中,可以通过${}语法来使用这些变量。

  • name:变量的名称。
  • value:变量定义的值。

示例:

<configuration scan="true" scanPeriod="60 seconds" debug="false"><property name="APP_Name" value="myAppName" /><contextName>${APP_Name}</contextName><!-- 其他配置省略 -->
</configuration>

7. 子节点<timestamp>

<timestamp>用于获取时间戳字符串,它有两个属性keydatePattern

  • key:标识此<timestamp>的名字。
  • datePattern:设置将当前时间(解析配置文件的时间)转换为字符串的模式,遵循java.text.SimpleDateFormat的格式。

示例:

<configuration scan="true" scanPeriod="60 seconds" debug="false"><timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/><contextName>${bySecond}</contextName><!-- 其他配置省略 -->
</configuration>

三、logback.xml配置示例

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false"><!-- 定义日志文件的存储地址,避免在 Logback 配置中使用相对路径 --><property name="LOG_HOME" value="/home" /><!-- 控制台日志 Appender --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!-- 格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%logger{50}:logger名称最多50个字符,%msg:日志消息,%n是换行符 --><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder></appender><!-- 文件日志 Appender,按照每天生成日志文件 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志文件输出的文件名模式 --><FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern><!-- 日志文件保留天数 --><MaxHistory>30</MaxHistory></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!-- 格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%logger{50}:logger名称最多50个字符,%msg:日志消息,%n是换行符 --><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder><!-- 日志文件达到最大大小时触发滚动 --><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><MaxFileSize>10MB</MaxFileSize></triggeringPolicy></appender><!-- 专为 Hibernate SQL 定制日志级别 --><logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" /><logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" /><logger name="org.hibernate.SQL" level="DEBUG" /><logger name="org.hibernate.engine.QueryParameters" level="DEBUG" /><logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" /><!-- MyBatis 日志配置 --><logger name="org.apache.ibatis" level="TRACE"/><logger name="java.sql.Connection" level="DEBUG"/><logger name="java.sql.Statement" level="DEBUG"/><logger name="java.sql.PreparedStatement" level="DEBUG"/><!-- 根日志记录器的输出级别和 Appender 引用 --><root level="DEBUG"><appender-ref ref="STDOUT" /><appender-ref ref="FILE"/></root>
</configuration>

四、总结

1. 输出源选择

Logback 的配置涉及输出源appender、日志记录器logger(子节点)和根记录器root(根节点)。实际上,Logback 输出日志的流程是从最具体的 Logger 开始:

  • 如果 Logger 配置了 Appender 引用(<appender-ref>),它将直接使用这些 Appender 输出日志。
  • 同时,Logback 会检查 Logger 的additivity属性。如果additivitytrue(默认值),日志事件还会向上级 Logger 传递。
  • 上级 Logger 会继续重复上述过程,直到根 Logger。根 Logger 总是会处理传递过来的日志事件,并使用其配置的 Appender 输出。
  • 如果 Logger 的additivity属性设置为false,则日志事件将不会传递给其上级 Logger,也不会使用上级 Logger 或根 Logger 的 Appender。

2. 日志级别 Level

日志记录器(Logger)的行为是分等级的,级别从高到低依次为OFFFATALERRORWARNINFODEBUGTRACEALL,或自定义级别。

Logback 建议在实践中主要使用ERRORWARNINFODEBUGTRACE这四个级别。级别高于或等于指定级别的日志将被打印出来。

例如,如果将 Logger 级别定义为INFO,则应用程序中所有DEBUGTRACE级别的日志信息将不会被打印出来。

重要提示: 在生产环境中,通常应将日志级别调整为WARN或更高级别(如ERROR),以避免生成过多日志影响性能和存储。

参考:logback 配置文件

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

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

相关文章

科学做视频网站东莞网站优化推荐

文章目录 1. spring中的bean是线程安全的吗2. 事务的实现--AOP3. 项目中用到的AOP4.spring中事务的失效场景5. Bean的生命周期6.spring中的循环引用问题7. springMVC的执行流程8. springboot自动装配原理9. 常见注解10 Mybatis11 Mybatis一二级缓存 1. spring中的bean是线程安全…

网站上哪个做相片书好广安市邻水建设局网站

对计量经济学初学者而言&#xff0c;OLS原理的矩阵表示通常令人“发怵”。其原因主要在于&#xff0c;至少在财经类课程体系中&#xff0c;关于矩阵微分的先行课程是缺失的。鉴于计量经济学的进阶课程大多采用矩阵语言&#xff0c;笔者认为有必要专文论述如何“搞掂”关于OLS原…

在360怎么做网站网站建设中小企业广西

在实际开发中&#xff0c;根据某一个变量动态展示图片的情况有很多。实现方法分打包构建工具的差异而不同。 1、webpack的项目 require引入图片资源 2、vite的项目 new URL(url,base).href 疑问解答&#xff1a;为什么vite项目不可以用require&#xff1f; 原因在于&#xf…

网站建设 企炬网站开发和合同范本

线性回归是一种简单的预测模型&#xff0c;它试图通过线性关系来预测目标变量。在TensorFlow中&#xff0c;我们可以使用tf.GradientTape来跟踪我们的模型参数的梯度&#xff0c;然后用这个信息来优化我们的模型参数。 以下是一个简单的线性回归的例子&#xff1a; pythonimpo…

网站建设教程网厦门的推广公司有哪些

目录 ChatGPT 发生错误&#xff1f;请参阅如何修复连接错误&#xff01; 修复 ChatGPT 发生错误的问题 基本故障排除技巧 检查 ChatGPT 的服务器状态 检查 API 限制 检查输入格式 清除浏览数据 香港DSE是什么&#xff1f; 台湾指考是什么&#xff1f; 王湘浩 生平 …

关于建设门户网站的请示一个二手书网站的建设目标

ChatGPT 可以帮助我们生成广告文案和宣传图片&#xff0c;这对营销品牌建设很有帮助。通常&#xff0c;一个产品会有一个主要的广告词&#xff0c;传达设计理念或宣传产品的好处。我们可以尝试直接生成文案&#xff0c;看看 ChatGPT 有没有好的创意。假设我们的产品是一款登山鞋…

网站空间域名多少钱楚雄 公司 网站

微信小程序的下拉刷新配置主要在页面的配置文件 app.json 中进行。 在 app.json 中&#xff0c;可以使用 enablePullDownRefresh 字段来配置是否支持下拉刷新&#xff0c;该字段的值为布尔类型。 示例代码如下&#xff1a; {"pages": ["pages/index/index&qu…

网页设计和网站建设的课程设计网页模板网站都有什么作用

系列文章目录 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 C技能系列 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everything is for the future of dream we…

MySQL COUNT(*)性能对比:MyISAM为何比InnoDB快?全面解析与优化方案

MySQL COUNT(*)性能对比:MyISAM为何比InnoDB快?全面解析与优化方案MySQL中不同存储引擎执行SELECT COUNT(*)的速度差异明显。MyMySA⁴M最快,因直接维护精确行数(O(1));InnoDB需全表扫描(O(n))且受MVCC特性影响。优…

济南 网站推广营销活动策划方案模板

以下是一个常用的英文审稿意见回复信模板&#xff0c;包含一些常见的语料总结&#xff0c;供你参考&#xff1a; 审稿意见回复信模板 Dear [Editor’s Name], Re: Manuscript ID [Manuscript ID] titled “[Title of the Manuscript]” We sincerely appreciate the time an…

凡科做网站行吗wordpress建站镜像

背景 谈起C&#xff0c;它被公认为最难学的编程语言之一&#xff0c;不仅语法知识点广泛&#xff0c;细节内容之多&#xff0c;学习难度和学习周期也长&#xff0c;导致好多新入行的开发者对C“敬而远之”&#xff0c;甚至“从入门到放弃”。自C11开始&#xff0c;好多C程序员…

2025.10.1总结

继续看苍穹外卖,redis简单过完之后是微信小程序的前端开发,本质上和web的前端大差不差,也是向后端发送请求

网站开发的工资是多少网站源码模板下载

真的很闷&#xff0c;Blog换个样子&#xff0c;以前的黑色&#xff0c;太沉闷了&#xff01; 转载于:https://www.cnblogs.com/lovenets/archive/2006/11/18/564736.html

手机网站开发兼容性软件开发项目内容

来源&#xff1a;大数据文摘编译&#xff1a;蒋宝尚据悉&#xff0c;当地时间周六&#xff0c;马斯克辞去特斯拉董事会主席一职&#xff0c;并且支付2000万美元罚款。以表示对美国证券交易委员会(SEC)指控的回应。SEC的指控来源于马斯克8月7日的一篇推文。推文中&#xff0c;他…

怎么做自己的网站赚钱网站怎么做彩页

问题描述 首先&#xff0c;说明一下这个问题是研究生期间c课的综合作业&#xff0c;本来有好多选择但最后还是选择了约瑟夫环问题。下面是约瑟夫环的问题描述以及设计要求&#xff1a; 约瑟夫环&#xff08;约瑟夫问题&#xff09;是一个数学的应用问题&#xff1a;已知n个人&…

美篇在哪个网站做的检测网站是否正常

引言&#xff1a; 在日常工作和学习中&#xff0c;我们经常需要使用Microsoft Word来创建、编辑和处理文档。然而&#xff0c;手动操作Word可能会耗费大量的时间和精力。为了提高工作效率&#xff0c;我们可以使用Python编程语言来操作Word文档&#xff0c;实现文档的自动化处理…

子结构判断

子结构判断 LCR 143. 子结构判断参考题解题前知识 1)子结构 首先我们先了解一下子结构:原题信息:判断 tree2 是否以 tree1 的某个节点为根的子树具有 相同的结构和节点值 。 子结构也就是B树是否含于A树左子树或者右…

使用 Go 进行验证码识别

Go 语言也可以与 Tesseract OCR 配合使用来识别验证码。我们将使用 go-tesseract 这个库来进行 OCR 操作。安装 Tesseract OCR首先,你需要确保你已经安装了 Tesseract OCR。你可以通过以下命令在 Linux 和 macOS 上安…

使用 Rust 进行验证码识别

Rust 是一种高效且内存安全的语言,适用于需要高性能的应用场景。虽然 Rust 的生态相较于 Python 和 Go 可能稍逊一筹,但我们依然可以通过使用适配 Tesseract OCR 的 Rust 库来实现验证码识别。安装 Tesseract OCR首先…

花卉网站建设策划书正规男科医院

文章目录 1. MyBatis的常用注解2. 基于注解的MyBatis增删改查增删改查完整代码加载映射关系测试代码 3. MyBatis的注解实现复杂映射开发一对一操作的实现一对一操作实现的第二种方式一对多操作的实现多对多操作实现 1. MyBatis的常用注解 2. 基于注解的MyBatis增删改查 使用注…