log4j 的参数配置

在Log4j 1.x版本中,log4j.properties文件是配置日志系统的主要方式。这个文件包含了一系列的属性设置,用于定义日志的行为,包括日志级别、Appender(日志输出目的地)的配置、以及Appender的布局(Layout)等。下面是对这些参数的一些详细解读:

1. 根Logger(Root Logger)

log4j.rootLogger=LEVEL, APPENDER1, APPENDER2, ...
  • LEVEL:这是根Logger的日志级别。Log4j 1.x中支持的级别有TRACE、DEBUG、INFO、WARN、ERROR和FATAL。只有级别等于或高于这个级别的日志消息才会被处理。
  • APPENDER1, APPENDER2, ...:这些是通过逗号分隔的Appender名称列表,根Logger将把日志消息发送给这些Appender。Appender定义了日志消息的目的地,比如控制台、文件、远程服务器等。

2. Appender配置

Appender的配置通常包括Appender的类型、名称、目标(如文件名)、布局(Layout)等。

# ConsoleAppender配置示例  
log4j.appender.A1=org.apache.log4j.ConsoleAppender  
log4j.appender.A1.Target=System.out  
log4j.appender.A1.layout=org.apache.log4j.PatternLayout  
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n  # FileAppender配置示例  
log4j.appender.FILE=org.apache.log4j.FileAppender  
log4j.appender.FILE.File=logs/myapp.log  
log4j.appender.FILE.Append=true  
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout  
log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
  • log4j.appender.A1(或log4j.appender.FILE):这定义了Appender的名称,后面所有的配置都将通过这个名称来引用这个Appender。
  • org.apache.log4j.ConsoleAppender(或org.apache.log4j.FileAppender):这指定了Appender的类型,即这个Appender是一个控制台Appender还是一个文件Appender。
  • log4j.appender.A1.Target=System.out:这是ConsoleAppender特有的属性,指定了输出目标,System.out是标准输出流,通常指向控制台。
  • log4j.appender.FILE.File:这是FileAppender特有的属性,指定了日志文件的路径和名称。
  • log4j.appender.FILE.Append=true:这也是FileAppender特有的属性,指定是否追加日志到文件末尾,true表示追加,false表示覆盖。
  • log4j.appender.A1.layout(或log4j.appender.FILE.layout):这指定了Appender的布局类型,PatternLayout是常用的布局类型,它允许你通过指定的模式来格式化日志消息。
  • log4j.appender.A1.layout.ConversionPattern(或log4j.appender.FILE.layout.ConversionPattern):这定义了PatternLayout的布局模式,用于格式化日志消息。模式字符串可以包含各种日志事件的格式化信息,如日期、日志级别、日志消息等。

3. 日志级别与Appender的关系

除了根Logger可以指定日志级别外,你也可以为特定的Logger(而不是根Logger)指定级别,并且这些Logger可以引用不同的Appender。这允许你对不同的包或类进行细粒度的日志控制。

4. 关于log4j.appender.FILE.layout.ConversionPattern的解读

log4j.appender.FILE.layout.ConversionPattern 是 Log4j 1.x 配置中用于定义文件Appender(FileAppender)输出日志消息格式的重要参数。它指定了一个模式字符串(Pattern String),该字符串决定了日志消息在文件中被格式化的方式。这个模式字符串可以包含多个格式化选项,用于在日志消息中插入各种信息,如时间戳、日志级别、日志记录器的名称、日志消息本身等。

下面是对 log4j.appender.FILE.layout.ConversionPattern 中一些常用格式化选项的解读:

  • %d{yyyy-MM-dd HH:mm:ss}:这表示日期和时间,其中 {yyyy-MM-dd HH:mm:ss} 指定了日期和时间的格式。在这个例子中,日期将以 年-月-日 时:分:秒 的格式显示。

  • %-5p:这表示日志消息的级别(如DEBUG、INFO、WARN、ERROR等),-5 指定了日志级别文本的最小宽度为5个字符,如果不足5个字符,则左对齐并填充空格;如果超过5个字符,则不会被截断。

  • %c{1}:这表示日志记录器的名称(即发出日志消息的类的全限定名)。{1} 指定了只显示类名的最后一个组件(即类名本身,不包括包名)。如果你想去掉包名并只显示类名,这是一个很有用的选项。

  • %L:这表示发出日志消息的代码行号。

  • %m:这表示日志消息本身。

  • %n:这表示新行,用于在日志消息之间插入换行符。

  • [%t]:显示产生日志事件的线程名称,被方括号包围。

将这些格式化选项组合起来,就可以得到一个完整的 ConversionPattern。例如:

log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

这个模式字符串告诉 Log4j,在将日志消息写入文件时,应该按照以下格式来格式化每条消息:

  • 首先,显示日期和时间(格式为 年-月-日 时:分:秒)。
  • 然后,显示日志级别(左对齐,至少占用5个字符的宽度)。
  • 接着,显示发出日志消息的类的最后一个组件名称(即类名),后面跟着一个冒号和行号。
  • 最后,显示日志消息本身,并在消息末尾添加一个换行符。

这样,每条日志消息都会按照指定的格式清晰地显示在文件中,便于后续的查看和分析。

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

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

相关文章

提升LLM能力表现的四种AI代理策略

欢迎来到AI产品经理从0到1研习之旅。 “AI Agent”系列的第二篇,它来了!我说过,AI Agent才是我最看好的(大模型落地应用)未来,嘿嘿,目测有很多大佬与我有相似的看法。 本文从吴恩达&#xff0…

Python | Leetcode Python题解之第401题二进制手表

题目&#xff1a; 题解&#xff1a; class Solution:def readBinaryWatch(self, turnedOn: int) -> List[str]:ans list()for i in range(1024):h, m i >> 6, i & 0x3f # 用位运算取出高 4 位和低 6 位if h < 12 and m < 60 and bin(i).count("1&…

【0326】Postgres内核之 VACUUM (FULL)构建所有要 VACUUM 的 relation(s) list(17)

上一篇: 【0325】Postgres内核之 VACUUM(FULL) 创建 BufferAccessStrategy object(16) 1. 构建 vacuum 关系表(reltaions) List 在上一篇文章中讲解了Postgres内核创建 缓冲区策略对象 ,之后初始化给全局指针变量 vac_strategy。 接下来Postgres将通过vacuum()函数的…

浙大数据结构:03-树2 List Leaves

这道题我借用了一点上一题的代码思路&#xff0c;这题考察的主要是层序遍历&#xff0c;即用队列来实现&#xff0c;当然此处我依然采用数组模拟队列来实现。 机翻 1、条件准备 map的键存下标&#xff0c;后面值分别存左右子树的下标&#xff0c;没有子树就存-1. head数组只…

nginx部署前端vue项目

一、部署前端Vue项目到Nginx服务器的核心步骤包括&#xff1a; ‌准备工作‌&#xff1a; 确保Vue项目已开发完成并能在本地正常运行。安装并配置Nginx服务器。 ‌打包Vue项目‌&#xff1a; 在Vue项目根目录下运行npm run build命令&#xff0c;生成包含所有生产环境所需静态文…

产业园服务体系建设,是否已全面覆盖企业成长的每一个阶段?

在当今竞争激烈的商业环境中&#xff0c;产业园作为企业发展的重要载体&#xff0c;其服务体系的完善程度至关重要。那么&#xff0c;产业园服务体系建设&#xff0c;是否已全面覆盖企业成长的每一个阶段呢&#xff1f; 从企业的初创期来看&#xff0c;产业园可以提供办公场地的…

数据结构与算法学习day21-二叉树

一、从中序与后序遍历序列构造二叉树 1.题目 106. 从中序与后序遍历序列构造二叉树 - 力扣&#xff08;LeetCode&#xff09; 2.思路 以后序&#xff08;左右中&#xff09;数组的最后一个元素为切割点&#xff08;根节点&#xff09;&#xff0c;切割的节点切中序&#xf…

初学者指南:MyBatis 入门教程

主要介绍了Mybatis的基本使用、JDBC、数据库连接池、lombok注解&#xff01; 文章目录 前言 什么是Mybatis? 快速入门 使用Mybatis查询所有的用户信息 配置SQL提示 JDBC介绍 Mybatis 数据库连接池 lombok 总结 前言 主要介绍了Mybatis的基本使用、JDBC、数据库连接…

Tableau学习日记

Day1&#xff1a;Tableau简介、条形图与直方图 1.Tableau绘制条形图 1.1 条形图1&#xff1a;各地区酒店数量 1.2 条形图2&#xff1a;各地区酒店均价 1.3 堆积图&#xff1a;价格等级堆积图 2.Tableau绘制直方图 2.1创建评分直方图 Day2&#xff1a;Tableau简介、条形图与直…

Flutter类

Dart中的对象都继承自 Object 类&#xff0c;单继承&#xff08;extend关键字&#xff09;。Dart与Java、kotlin不同的是其无public、private、protected修饰符&#xff0c;默认public &#xff0c;通过在属性名、方法名前加 _下划线 来定义是否私有。 实现一个简单的类 class…

pod被驱逐追溯根因

背景 收到pod报警&#xff0c;看到其状态是error&#xff0c;新的pod又在另外一台机器上起来了。 原因分析 describe pod看到pod被驱逐 Status: Failed Reason: Evicted Message: The node was low on resource: ephemeral-storage. Containe…

逆元(模板)

1.费马小定理 #include<bits/stdc.h> using namespace std; #define int long long int ksm(int x,int y,int p){int ans1;while(y){if(y&1) ansans*x%p;xx*x%p;y>>1;}return ans; } signed main() {//求 n 在 p 下的逆元&#xff0c;p 必须是质数int n,p;ci…

数据结构之红黑树的 “奥秘“

目录&#xff1a; 一.红黑树概念 二. 红黑树的性质 三.红黑树的实现 四.红黑树验证 五.AVL树和红黑树的比较 一.红黑树概念 1.红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何 一条从根…

YOLO配合 PYQT做自定义虚拟电子围-自定义绘制多边形虚拟电子围栏

电子围栏标注以及显示 1、目标检测&#xff1a; YOLO可以识别检测物体&#xff0c;这是众所周知的。使用YOLO来做目标检测&#xff0c;并获取坐标信息。 2、电子围栏 比如在监控中&#xff0c;指定一块区域&#xff0c;如果有目标进入&#xff0c;则发出警报&#xff0c;并提…

《基于深度半监督学习的目标检测综述》泛读

基于深度半监督学习的目标检测方法分为 1、生成式方法 2、一致性正则化方法 3、基于图的方法 4、伪标记方法和混合方法 然后基于常用数据集 对典型方法进行了性能对比&#xff0c;最后分析了其挑战和发展趋势&#xff0c;旨在为相关研究提供参考 收获就是&#xff1a; 1…

JMeter 入门之远程启动,服务模式,多机联测,负载均衡测试

本文主要介绍 JMeter 远程启动及使用多节点完成大并发测试&#xff08;负载均衡测试&#xff09;&#xff0c;主打一个压力山大&#xff0c;借用 黑神话&#xff1a;悟空 的技能来描述就是远程开大&#xff0c;释放猴子猴孙技能。 搜了一些 jmeter 的案例或教程&#xff0c;讲的…

MyBatis-Plus分页查询、分组查询

目录 准备工作1. 实体类2. Mapper类3. 分页插件4. 数据 分页查询1. 使用条件构造器2. 使用自定义sql 分组查询1. 分组结果类2. 自定义sql3. 测试类 准备工作 1. 实体类 对地址字段address使用字段类型转换器&#xff0c;将List转为字符串数组保存在数据库中 package com.exa…

计算机网络基础概念 交换机、路由器、网关、TBOX

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、VLAN是什么&#xff1f;二 、交换机三、路由器四、网关五、TBOX六、问题1 、网关和交换机的区别2、网关和路由器的区别 总结 前言 工作有感而发&#xff0…

Docker 部署 Redis (图文并茂超详细)

部署 Redis ( Docker ) [Step 1] : 拉取 Redis 镜像, 推荐使用 7 的 Redis 版本 docker pull redis:7.0.12[Step 2] : 创建 Redis 相关目录 ➡️ 启动 Redis 容器 ➡️ 拷贝文件 ➡️ 授权文件夹 ➡️ 删除容器 # 创建 Redis 相关目录 mkdir -p /data/redis/{conf,data,log…

探索Python中文拼音转换的奥秘:xpinyin库

文章目录 **探索Python中文拼音转换的奥秘&#xff1a;xpinyin库**背景介绍库简介安装指南函数使用示例应用场景常见问题与解决方案总结 探索Python中文拼音转换的奥秘&#xff1a;xpinyin库 背景介绍 在处理中文文本数据时&#xff0c;我们经常需要将中文字符转换为拼音。无…