log4j2.xml 配置文件详解

文章目录

            • 一、log4j2介绍
            • 二、配置文件节点解析
            • 三、需要的Maven依赖
            • 四、最简配置
            • 五、较全面的配置
            • 补充

一、log4j2介绍

log4j 2.x版本不再支持像1.x中的.properties后缀的文件配置方式,2.x版本配置文件后缀名只能为".xml",".json"或者".jsn"。
配置文件的格式:log2j配置文件可以是xml格式的,也可以是json格式的。
配置文件的位置:log4j2默认会在classpath目录下寻找log4j2.xml、log4j.json、log4j.jsn等名称的文件。
系统选择配置文件的优先级(从先到后)如下:
  (1).classpath下的名为log4j2-test.json 或者log4j2-test.jsn的文件.
  (2).classpath下的名为log4j2-test.xml的文件.
  (3).classpath下名为log4j2.json 或者log4j2.jsn的文件.
  (4).classpath下名为log4j2.xml的文件.
  我们一般默认使用log4j2.xml进行命名。

二、配置文件节点解析

(1).根节点Configuration有两个属性:status和monitorinterval,有两个子节点:Appenders和Loggers(表明可以定义多个Appender和Logger)。
  status用来指定log4j本身的打印日志的级别。
  monitorinterval用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s。
  (2).Appenders节点,常见的有三种子节点:Console、RollingFile、File。
Console节点用来定义输出到控制台的Appender。
  name:指定Appender的名字.
  target:SYSTEM_OUT 或 SYSTEM_ERR,一般只设置默认:SYSTEM_OUT。
  PatternLayout:输出格式,不设置默认为:%m%n。
File节点用来定义输出到指定位置的文件的Appender。
  name:指定Appender的名字。
  fileName:指定输出日志的目的文件带全路径的文件名。
  PatternLayout:输出格式,不设置默认为:%m%n。
RollingFile节点用来定义超过指定大小自动删除旧的创建新的的Appender。
  name:指定Appender的名字。
  fileName:指定输出日志的目的文件带全路径的文件名。
  PatternLayout:输出格式,不设置默认为:%m%n。
  filePattern:指定新建日志文件的名称格式。
  Policies:指定滚动日志的策略,就是什么时候进行新建日志文件输出日志。
  TimeBasedTriggeringPolicy:Policies子节点,基于时间的滚动策略,interval属性用来指定多久滚动一次,默认是1 hour。modulate=true用来调整时间:比如现在是早上3am,interval是4,那么第一次滚动是在4am,接着是8am,12am…而不是7am。
  SizeBasedTriggeringPolicy:Policies子节点,基于指定文件大小的滚动策略,size属性用来定义每个日志文件的大小。
  DefaultRolloverStrategy:用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的(通过max属性)。
ThresholdFilter属性:onMatch表示匹配设定的日志级别后是DENY还是ACCEPT,onMismatch表示不匹配设定的日志级别是DENY还是ACCEPT还是NEUTRAL。
  (3).Loggers节点,常见的有两种:Root和Logger。
  Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出
  level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF。
  Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。
  level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF。
  name:用来指定该Logger所适用的类或者类所在的包全路径,继承自Root节点。
  AppenderRef:Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root.如果指定了,那么会在指定的这个Appender和Root的Appender中都会输出,此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出。
  (4).关于日志level.
  共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF。
  All:最低等级的,用于打开所有日志记录。
  Trace:是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低日志级别不让他输出。
  Debug:指出细粒度信息事件对调试应用程序是非常有帮助的。
  Info:消息在粗粒度级别上突出强调应用程序的运行过程。
  Warn:输出警告及warn以下级别的日志。
  Error:输出错误信息日志。
  Fatal:输出每个严重的错误事件将会导致应用程序的退出的日志。
  OFF:最高等级的,用于关闭所有日志记录。
  程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。

配置参数解释
%d{HH:mm:ss.SSS} 表示输出到毫秒的时间
%t 输出当前线程名称
%-5level 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
%logger 输出logger名称,因为Root Logger没有名称,所以没有输出
%msg 日志文本
%n 换行
其他常用的占位符有:
%F 输出所在的类文件名,如Log4j2Test.java
%L 输出行号
%M 输出所在方法名
%l 输出语句所在的行数, 包括类名、方法名、文件名、行数

三、需要的Maven依赖
<dependency>  <groupId>org.apache.logging.log4j</groupId>  <artifactId>log4j-api</artifactId>  <version>2.5</version>  </dependency>  <dependency>  <groupId>org.apache.logging.log4j</groupId>  <artifactId>log4j-core</artifactId>  <version>2.5</version>  </dependency>  
四、最简配置
<?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="error"><AppenderRef ref="Console"/></Root></Loggers></Configuration>
五、较全面的配置

<?xml version="1.0" encoding="UTF-8"?><!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --><!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出--><!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数--><configuration status="WARN" monitorInterval="30"><!--先定义所有的appender--><appenders><!--这个输出控制台的配置--><console name="Console" target="SYSTEM_OUT"><!--输出日志的格式--><PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/></console><!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用--><File name="log" fileName="log/test.log" append="false"><PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/></File><!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--><RollingFile name="RollingFileInfo" fileName="${sys:user.home}/logs/info.log"filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log"><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->        <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="100 MB"/></Policies></RollingFile><RollingFile name="RollingFileWarn" fileName="${sys:user.home}/logs/warn.log"filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log"><ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="100 MB"/></Policies><!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 --><DefaultRolloverStrategy max="20"/></RollingFile><RollingFile name="RollingFileError" fileName="${sys:user.home}/logs/error.log"filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log"><ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="100 MB"/></Policies></RollingFile></appenders><!--然后定义logger,只有定义了logger并引入的appender,appender才会生效--><loggers><!--过滤掉spring和mybatis的一些无用的DEBUG信息--><logger name="org.springframework" level="INFO"></logger><logger name="org.mybatis" level="INFO"></logger><root level="all"><appender-ref ref="Console"/><appender-ref ref="RollingFileInfo"/><appender-ref ref="RollingFileWarn"/><appender-ref ref="RollingFileError"/></root></loggers></configuration>
补充

log4j2.xml 文件需要配置到WEB-INF的classes下面才会生效

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="ERROR" monitorInterval="600"><!-- configure.status 为设置日志输出级别,级别如下:OFF 、FATAL 、ERROR、WARN、INFO、DEBUG、TRACE、ALL --><!-- configure.monitorInterval 监控间隔 指log4j2每隔600秒(10分钟),自动监控该配置文件是否有变化,如果变化,则自动根据文件内容重新配置 --><Properties><property name="pattern">%d{yyyy/MM/dd HH:mm:ss.SSS} [%p] %t %c %m%n</property><property name="basePath">H:/datatrans/logs</property></Properties><!--配置appenders源:日志输出的地址--><Appenders><Console name="console" target="SYSTEM_OUT"><PatternLayout pattern="${pattern}"/></Console><RollingRandomAccessFile name="fileLogger"fileName="${basePath}/server.log"filePattern="${basePath}/server-%d{yyyy-MM-dd}.log"append="true"><PatternLayout pattern="${pattern}"/><Policies><TimeBasedTriggeringPolicy interval="1" modulate="true"/><!--测试日志输出:--><SizeBasedTriggeringPolicy size="3kb"/><!--<SizeBasedTriggeringPolicy size="100MB"/>--></Policies></RollingRandomAccessFile></Appenders><!--配置logers:级别、使用的输出地--><Loggers><Logger name="com.gblfy.datatrans"level="debug"additivity="true"><appender-ref ref="fileLogger"level="debug"/></Logger><Root level="info" additivity="false"><appender-ref ref="console"/></Root></Loggers>
</Configuration>

参考:
Java日志框架与Log4j2详解
https://www.jianshu.com/p/1b04924d8a1f
Java日志打印: log4j2
https://www.cnblogs.com/bestlmc/p/12012875.html

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

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

相关文章

Redis radix tree源码解析

Redis实现了不定长压缩前缀的radix tree&#xff0c;用在集群模式下存储slot对应的的所有key信息。本文将详述在Redis中如何实现radix tree。 核心数据结构 raxNode是radix tree的核心数据结构&#xff0c;其结构体如下代码所示&#xff1a; typedef struct raxNode {uint32…

针对提高48V 配电性能的诸多思考!

作者&#xff1a;Phil Davies 众所周知配电网络 (PDN) 是所有电源系统的主干部分&#xff0c;但随着系统电源需求的不断上升&#xff0c;传统 PDN 承受着提供足够性能的巨大压力。 对于功耗和热管理而言&#xff0c;主要有两种方法可以改善 PDN 对电源系统性能的影响&#x…

Apache Cassandra static column 介绍与实战

假设我们有这样的场景&#xff1a;我们想在 Cassandra 中使用一张表记录用户基本信息&#xff08;比如 email、密码等&#xff09;以及用户状态更新。我们知道&#xff0c;用户的基本信息一般很少会变动&#xff0c;但是状态会经常变化&#xff0c;如果每次状态更新都把用户基本…

android线性布局快捷键,【整理】Android图形界面知识学习与总结之:Linear Layout线性布局...

【背景】之前已经学习了&#xff1a;现在接着去学习&#xff1a;整理如下&#xff1a;Linear Layout1.LinearLayout是一个视图组合2.LinearLayout中的子视图只能已单个方向排列&#xff0c;要么是水平&#xff0c;要么是垂直&#xff1b;4.所有如果是垂直的列表&#xff0c;则每…

linux查看openssh和openssl版本命令

查看openssh版本命令 ssh -V查看openssl版本命令 openssl version

TensorFlow 2.0+Keras 防坑指南

TensorFlow 2.0是对1.x版本做了一次大的瘦身&#xff0c;Eager Execution默认开启&#xff0c;并且使用Keras作为默认高级API&#xff0c; 这些改进大大降低的TensorFlow使用难度。 本文主要记录了一次曲折的使用KerasTensorFlow2.0的BatchNormalization的踩坑经历&#xff0c…

收藏!企业数据安全防护5条建议

引言&#xff1a;数据安全对企业生存发展有着举足轻重的影响&#xff0c;数据资产的外泄、破坏都会导致企业无可挽回的经济损失和核心竞争力缺失&#xff0c;而往往绝大多数中小企业侧重的是业务的快速发展&#xff0c;忽略了数据安全重要性。近年来&#xff0c;企业由于自身的…

容器安全拾遗 - Rootless Container初探

近期Docker 19.03中发布了一个重要的特性 “Rootless Container支持”。趁着五一假期&#xff0c;快速验证一下。本文参考了Experimenting with Rootless Docker 一文的内容&#xff0c;并且补充了更多的细节和上手内容。 Rootless容器背景与架构 Docker和Kubernetes已经成为…

android 参数 attrs.xml,使用attrs.xml自定义属性

控件有很多属性&#xff0c;如android:id、android:layout_width、android:layout_height等&#xff0c;但是这些属性都是系统自带的属性。使用attrs.xml文件&#xff0c;可以自己定义属性。本文在Android自定义控件的基础上&#xff0c;用attrs.xml文件自己定义了属性。首先&a…

mybatis:在springboot中的配置

Mybatis 配置 使全局的映射器启用或禁用缓存。 mybatis.configuration.cache-enabledtrue全局启用或禁用延迟加载。当禁用时&#xff0c;所有关联对象都会即时加载。 mybatis.configuration.lazy-loading-enabledtrue当启用时&#xff0c;有延迟加载属性的对象在被调用时将会完…

直面PHP微服务架构挑战

在4月20日的阿里云栖开发者沙龙PHP技术专场上&#xff0c;云智慧Technical VP高驰涛为大家介绍了微服务的前世今生&#xff0c;分享了微服务架构实践中所面对的诸多挑战以及相应的应对策略。 本次直播视频精彩回顾&#xff0c;戳这里&#xff01; 直播回顾&#xff1a;https://…

5亿整数的大文件,怎么排序 ?面试被问傻!

来源 | 程序员追风编辑 | Carol出品| CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;最近一家公司&#xff0c;面试官一上来&#xff0c;就问了我这么一个问题&#xff0c;我一脸懵逼&#xff0c;决定记录一下。问题给你1个文件bigdata&#xff0c;大小4663M&…

RabbitMQ 的延时队列和镜像队列原理与实战

在阿里云栖开发者沙龙PHP技术专场上&#xff0c;掌阅资深后端工程师、掘金小测《Redis深度历险》作者钱文品为大家介绍了RabbitMQ的延时队列和镜像队列的原理与实践&#xff0c;重点比较了RabbitMQ提供的消息可靠与不可靠模式&#xff0c;同时介绍了生产环境下如何使用RabbitMQ…

springboot 整合mybatisplus输出sql语句不输出结果集

mybatis-plus&#xff1a; # 日志配置 logging:level:#基础包com.ruoyi: debug#指定报的日志级别org.springframework: warnmybatis-plus:mapper-locations: classpath*:com/gblfy/**/mapping/*.xmlconfiguration: # log-impl: org.apache.ibatis.logging.stdout.StdOutImp…

深入浅出网络编程与Swoole内核

在阿里云PHP技术沙龙专场中&#xff0c;阿里云邀请到php-nsq作者&#xff0c;pecl、Swoole开发组成员吴振宇分享了Swoole进程模型的原理与Swoole协程实现的原理。并结合具体开发案例讲解了Swoole在网络编程中的应用。 本次直播视频精彩回顾&#xff0c;戳这里&#xff01; 直播…

Spark大数据分布式机器学习处理实战 | 博文精选

作者| 数挖小飞飞编辑 | Carol出品| CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;Spark是一种大规模、快速计算的集群平台&#xff0c;本文试图通过学习Spark官网的实战演练笔记提升作者实操能力以及展现Spark的精彩之处。本文的参考配置为&#xff1a;Deepin 1…

shell脚本触发java程序传参数

eods.sh nohup java -cp "./xxx.war/WEB-INF/lib/*:./xxx.war/WEB-INF/classes" com.gblfy.datatrans.controller.OdsDeal $1> /app/ods/logs/ods.log &#无参 ./eods.sh #有参 ./eods.sh 2020-12-22public static void main(String args[]) {if (args.leng…

五四,阿里巴巴新青年了解下?

今天&#xff0c;橙子挖掘了几位程序员小哥的故事&#xff0c;他们是淘宝技术节上涌现出的“高手”。为了追求极致&#xff0c;代码也能成为一种艺术&#xff0c;看完之后也许你会对技术人有完全不同的认识。 1 伯灵&#xff1a;“技术作品代表我对技术的态度&#xff1a;解决…

android zxing 自动对焦,ZXing自动对焦问题

Pavel Bobkov..5我在Samsung Galaxy Grand 2(Android 4)上遇到了同样的问题&#xff0c;并且找到了一个解决方案。启动相机之前&#xff0c;我禁用了自动对焦功能。1-2秒后&#xff0c;我启用了它。我尝试了几种方法&#xff0c;并决定定期切换自动对焦功能。为了实现这一点&am…

多场景下的AI疫情防控“天网”:解读云边端联动下的全栈 AI 技术

在全民抗疫的特殊时期下&#xff0c;伴随着春运返潮&#xff0c;企业陆续复工&#xff0c;从重点防控的机场、火车站&#xff0c;到学校、企业、社区等密集型场所&#xff0c;都是不能忽视的地点。除了人工逐一测量体温排查外&#xff0c;我们还发现&#xff0c;在人员复杂、流…