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

Log4j.xml配置说明

介绍

Log4j 2 是一款广泛使用的 Java 日志框架,它支持多种日志级别、异步日志、过滤器等功能,并且具有高性能和可扩展性。以下是 Log4j 2 的详细配置说明:

  1. 配置文件名称和存放位置:Log4j 2 的配置文件名可以是任意有效的文件名,但通常以 .xml.json.yaml 结尾。配置文件应该存放在项目的类路径(class path)下,例如 src/main/resources 目录下。

  2. 配置文件格式:Log4j 2 的配置文件可以采用 XML、JSON 或 YAML 格式。每种格式的配置文件都有自己的语法规则,具体可以参考 Log4j 官方文档。

  3. 配置内容:Log4j 2 的配置文件包括以下内容:

    • 配置根节点:XML 格式的配置文件具有一个根元素,例如 Configuration。JSON 和 YAML 格式的配置文件通常以对象形式组织配置项。
    • Appenders 节点:该节点下定义了所有的 Appender(日志输出目标),包括控制台、文件、数据库等。每个 Appender 定义了日志的输出格式、目的地、过滤器等信息。
    • Loggers 节点:该节点下定义了所有的 Logger(日志记录器),包括根 Logger 和自定义 Logger。每个 Logger 定义了日志的输出级别、Appender、过滤器等信息。
    • Properties 节点:该节点下定义了一些属性,用于配置日志输出的格式、目的地等。
    • Filters 节点:该节点下定义了过滤器,用于对日志进行筛选和过滤。例如,可以根据日志级别、消息内容等条件进行过滤。
  4. Appender 配置说明:Appender 是用于定义日志输出目标的元素。以下是几种常见的 Appender 和其配置说明:

    • ConsoleAppender:将日志输出到控制台。可以设置输出格式、目标等。
    • FileAppender:将日志输出到文件。可以设置文件名、文件编码、输出格式等。
    • RollingFileAppender:将日志输出到滚动文件。可以设置文件名、文件编码、最大文件大小、备份文件数量等。
    • AsyncAppender:将日志异步输出。可以设置线程池大小、队列大小等参数。
  5. Logger 配置说明:Logger 是用于定义日志记录器的元素。以下是几个常见的 Logger 和其配置说明:

    • RootLogger:根日志记录器,用于记录所有级别的日志。可以设置输出级别、Appender 等参数。
    • Logger:自定义日志记录器,可以设置输出级别、Appender 等参数。可以通过指定 Logger 的名称来创建多个 Logger。
  6. 属性配置说明:属性是用于配置日志输出的格式、目的地等参数的元素。以下是几个常见的属性和其配置说明:

    • PatternLayout:用于定义日志输出格式的属性。可以设置日期格式、时间格式、日志级别等参数。
    • FileName:用于定义日志文件名的属性。可以设置文件名、文件编码等参数。
    • FilePattern:用于定义滚动文件的滚动规则的属性。可以设置最大文件大小、备份文件数量等参数。
  7. 日志级别设置说明:Log4j 2 支持多种日志级别,包括 OFF、FATAL、ERROR、WARN、INFO、DEBUG 和 ALL。可以通过设置 Logger 的级别来控制不同级别的日志输出。例如,可以将根 Logger 的级别设置为 INFO,则所有级别的日志都会被记录,但只有 INFO 及以上级别的日志才会被输出。

  8. 日志过滤器说明:Log4j 2 支持多种过滤器,包括 deny(拒绝)、accept(接受)和 neutral(中立)等。可以通过设置过滤器的参数来筛选和过滤日志。例如,可以将某个 Appender 的过滤器设置为 deny(ERROR),则该 Appender 只记录 ERROR 及以上级别的日志。

  9. 日志异步输出说明:Log4j 2 支持异步输出日志,可以设置线程池大小、队列大小等参数来实现异步输出。异步输出可以提高系统的性能和响应速度。

  10. 日志自动检测和重新配置说明:Log4j 2 支持自动检测和重新配置日志文件的功能。可以通过设置 monitorInterval 参数来实现自动检测和重新配置功能,该参数表示每隔一定时间检查一次配置文件的修改情况,并重新加载配置文件。

简单示例

log4j2.xml是Log4j 2的配置文件,它采用XML格式进行配置。以下是一个简单的log4j2.xml配置文件示例及其说明:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"><Appenders><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/></Console></Appenders><Loggers><Root level="debug"><AppenderRef ref="Console"/></Root></Loggers>
</Configuration>

详细说明

  • <?xml version="1.0" encoding="UTF-8"?>:XML文件的声明,指定XML版本和编码方式。
  • <Configuration>:配置文件的根元素。
  • status="WARN":指定log4j本身的打印日志级别为WARN。
  • <Appenders>:定义了所有的Appender(日志输出目标)。
  • <Console>:控制台Appender,将日志输出到控制台。
  • name="Console":Appender的名称,用于在Loggers中引用。
  • target="SYSTEM_OUT":指定日志输出目标为控制台。
  • <PatternLayout>:定义了日志的输出格式。
  • pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n":指定日志的日期格式、时间格式、日志级别、Logger名称和消息格式等。
  • <Loggers>:定义了所有的Logger(日志记录器)。
  • <Root>:根Logger,用于记录所有级别的日志。
  • level="debug":指定日志输出级别为DEBUG。
  • <AppenderRef>:引用名为Console的Appender。

在Log4j 2的log4j2.xml配置文件中,PatternLayout提供了多种输出格式,通过在pattern属性中设置相应的模式字符串来选择所需的格式。以下是一些常见的输出格式:

  1. %d{HH:mm:ss.SSS}: 输出日志事件的日期和时间,格式为小时:分钟:秒.毫秒。
  2. %t: 输出产生该日志事件的线程名。
  3. %-5level: 输出日志级别,并限制最大宽度为5个字符。
  4. %logger{36}: 输出Logger名称,并限制最大宽度为36个字符。
  5. %msg: 输出应用提供的日志消息。
  6. %n: 输出一个换行符。
  7. %r: 输出自应用启动到输出该日志信息所耗费的毫秒数。
  8. %c: 输出所属的类目,通常就是所在类的全名。
  9. %C: 输出所属类的全名,类名较长的场合可以使用该模式。
  10. %M: 输出调用者的名称,即发生日志事件的代码的名称。
  11. %m: 输出应用提供的日志消息。
  12. %F: 输出日志消息发生的所在文件名称。
  13. %L: 输出日志消息发生的行数。
  14. %s: 输出简短的源代码位置信息,通常是类名、方法名和行号。
  15. %S: 输出详细的源代码位置信息,通常是完整的方法名和文件路径。

这些格式可以根据需要进行组合和修改,以满足特定的日志输出需求。在pattern属性中可以设置多个格式,每个格式之间用逗号分隔。

相关文章:

  • PgSQL高级
  • 一文讲解关于MCU启动原理的几个关键问题
  • 数据挖掘目标(客户价值分析)
  • 数据结构之----栈、队列、双向队列
  • matlab 最小二乘拟合空间直线(方法三)
  • 佛山陶企再造行业新风口!站在创新之上,消费需求之下
  • 微信小程序-登录
  • 第四章 Django 模板系统
  • PPT制作的几个注意事项
  • 小程序面试总结
  • 【C++】:set和map
  • WPF-附加属性《十二》
  • *上位机的定义
  • gin投票项目5
  • 关于Anaconda的安装和环境部署(此章专为新手制定)
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Bytom交易说明(账户管理模式)
  • css属性的继承、初识值、计算值、当前值、应用值
  • iOS 颜色设置看我就够了
  • Java比较器对数组,集合排序
  • Otto开发初探——微服务依赖管理新利器
  • php的插入排序,通过双层for循环
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Theano - 导数
  • 产品三维模型在线预览
  • 基于axios的vue插件,让http请求更简单
  • 两列自适应布局方案整理
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 微信小程序开发问题汇总
  • 译米田引理
  • ​【已解决】npm install​卡主不动的情况
  • ​io --- 处理流的核心工具​
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (1)(1.13) SiK无线电高级配置(五)
  • (3)(3.5) 遥测无线电区域条例
  • (4)(4.6) Triducer
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (二)PySpark3:SparkSQL编程
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (译) 函数式 JS #1:简介
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)JAVA中的堆栈
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET Framework .NET Core与 .NET 的区别
  • .NET 常见的偏门问题
  • .NET 中 GetProcess 相关方法的性能
  • .Net6 Api Swagger配置
  • .net中我喜欢的两种验证码
  • // an array of int