log4j2配置文件解读
使用前需要做的准备:
1. 去官方下载log4j2,导入jar包,基本上你只需要导入下面两个jar包就可以了(xx指的是版本号),也可以使用maven下载,个人觉得maven下载方便些:
log4j-core-xx.jar
log4j-api-xx.jar
2. 导入到你的项目中:这个就不说了。maven下载的就不需要手动导入了。
log4j2的使用:
我们知道,要在某个类中使用log4j记录日志,只需要申明下面的成员变量(其实不一定要是成员变量,只是为了方便调用而已),log4j2的使用非常简单,只要用LogManager的getLogger函数获取一个logger,就可以使用logger记录日志。在类中加入如下代码即可:
private static Logger logger = LogManager.getLogger(demo_log4j2.class.getName());
这里getLogger有一个参数指定的是这个logger的名称(demo_log4j2),这个名称在配置文件里面有需要。声明了Logger对象,我们就可以在代码中使用他了。
public class demo_log4j2 {
private static Logger logger = LogManager.getLogger(demo_log4j2.class.getName());
public static void main(String[] args) {
System.out.println(demo_log4j2.class.getName()); //反射机制产生的代码
logger.trace("trace信息");
logger.trace("boss");
logger.debug("debug信息");
logger.info("info信息");
logger.warn("warn信息");
logger.error("error信息");
} }
日志的级别
在log4j2中,一共有五种log level,分别为TRACE < DEBUG < INFO < WARN < ERROR < FATAL。
FATAL:用在极端的情形中,即必须马上获得注意的情况。这个程度的错误通常需要触发运维工程师的寻呼机。
ERROR:显示一个错误,或一个通用的错误情况,但还不至于会将系统挂起。这种程度的错误一般会触发邮件的发送,将消息发送到alert list中,运维人员可以在文档中记录这个bug并提交。
WARN:不一定是一个bug,但是有人可能会想要知道这一情况。如果有人在读log文件,他们通常会希望读到系统出现的任何警告。
INFO:用于基本的、高层次的诊断信息。在长时间运行的代码段开始运行及结束运行时应该产生消息,以便知道现在系统在干什么。但是这样的信息不宜太过频繁。
DEBUG:用于协助低层次的调试。
TRACE:用于展现程序执行的轨迹。
注意:
级别之间是包含的关系,意思是如果你设置日志级别是trace,则大于等于这个级别的日志都会输出。
基本上默认的级别没多大区别,就是一个默认的设定。你可以通过它的API自己定义级别。你也可以随意调用这些方法,不过你要在配置文件里面好好处理了,否则就起不到日志的作用了,而且也不易读,相当于一个规范,你要完全定义一套也可以,不用没多大必要。
日志调用
执行上面的demo,会报如下错误,且只会打印error、 fatal的信息, 因为没有配置log4j2的配置文件, 会使用系统默认的配置文件。
ERROR StatusLogger No log4j2 configuration file found. Using default configuration:logging only errors to the console.
若配置了配置文件,可根据自己的配置输出如下信息,把日志级别设置的是trace:
配置文件
log4j2的配置文件后缀名只能为 .xml, .json或者 .jsn, 在默认的情况, 系统选择configuration文件的优先级如下:
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该配置文件进行log输出的配置。 举例如下:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d [%t] %-5p [%c] - %m%n"/>
</Console>
</Appenders>
<Loggers>
<root level="TRACE">
<appender-ref ref="Console" />
</root>
</Loggers>
</Configuration>
log4j2配置文件介绍以及使用
Configuration根节点
有两个属性status和monitorinterval,有两个子节点:Appenders和Loggers(表明可以定义多个Appender和Logger).
status用来指定log4j本身的打印日志的级别.
monitorinterval用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s
Loggers节点:用于定义logger的level和所采用的appender,它有两种子节点:Root和Logger.
Root节点:用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出
level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.
AppenderRef:Root的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root,如果指定了MAME会在指定的这个Appender和Root的Appender中都会输出,此时我们可以设置Logger的additivity="false",只在自定义的Appender中输出
Logger节点:用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。
name:用来指定该Logger所适用的类或者类所在的包全路径,继承自Root节点.
level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.
其中配置文件日志级别说明如下:
all:最低级的,用于打开所有日志
trace: 是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低日志级别不让他输出。
debug: 调试么,我一般就只用这个作为最低级别,trace压根不用。是在没办法就用eclipse或者idea的debug功能就好了么。
info: 输出一下你感兴趣的或者重要的信息,这个用的最多了。
warn: 有些信息不是错误信息,但是也要给程序员的一些提示,类似于eclipse中代码的验证不是有error 和warn(不算错误但是也请注意,比如以下depressed的方法)。
error: 错误信息。用的也比较多。
fatal: 级别比较高了。重大错误,可以直接停止程序了
off:最高级,用于关闭所有日志
备注:程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。
Appendes节点
输出目的地.充分考虑了日志事件的输出、包装以及过滤转发的可能,包括最基本的输出到本地文件、输出到远程主机,对文件进行封装、注入, 并且还能按照日志文件的时间点、文件大小等条件迸行白动封存。它常用的三种子节点: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属性用来指定多久滚动依次,默认1hour。modulate=true用来调整时间,比如现在是下午七点,interval是4,name第一次滚动是在下午八点,接着是凌晨十二点,午夜四点,而不是一开始就是十一点。
SizeBasedTriggeringPolicy:Policies子节点,基于指定文件大小的滚动策略,size属性用来定义每个日志文件的大小
DefaultRolloverStrategy:用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的日志文件,通过max属性。不设置max属性,是默认7个文件
PatternLayout是日志文件的布局格式
常用的参数如下:
%d:打印时间,常用设置:{HH:mm:ss.SSS} {yyyy-MM-dd 'at' HH:mm:ss z}等
%class/%c:打印输出日志的类名,常用设置{36} 表示层数
%level:打印日志级别 ,常用设置%-5level 表示日志的级别长度小于5,则右边用空格填充 ;%5level 相反。
%L:打印日志输出语句在文件中的行号。
%M:打印日志输出语句所在的方法名。
%t:当前生成日志事件的线程。
%m/%msg/%message:输出日志事件所提供的信息。
说了这么多,贴个详细的配置信息:
<?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属性决定(false),这个也挺有用的,适合临时测试用-->
<File name="log" fileName="logs/data.log" append="true">
<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="10 KB"/>
</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>
<Logger name="com.selenium.log4j2.demo_log4j2" level="trace"> <!-- additivity="false" -->
<appender-ref ref="log" />
</Logger>
<root level="all">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFileInfo"/>
<appender-ref ref="RollingFileWarn"/>
<appender-ref ref="RollingFileError"/>
</root>
</loggers>
</configuration>
执行日志文件超过多大而重新新建日志文件结果如下:
log4j2配置文件解读的更多相关文章
- 怎样在idea添加log日志 以及log4j2配置文件解读
网上找了很多篇文章,就数这篇比较全,从下载到配置都有讲到,解决从0开始接触java日志文件添加的各位同学.参考文章:https://www.cnblogs.com/hong-fithing/p/769 ...
- log4j2 配置文件解读
1.日志相关介绍 日志接口(slf4j):slf4j是对所有日志框架制定的一种规范.标准.接口,并不是一个框架的具体的实现,因为接口并不能独立使用,需要和具体的日志框架实现配合使用,比如log4j.l ...
- 聊一聊log4j2配置文件log4j2.xml
一.背景 最近由于项目的需要,我们把log4j 1.x的版本全部迁移成log4j 2.x 的版本,那随之而来的slf4j整合log4j的配置(使用Slf4j集成Log4j2构建项目日志系统的完美解决方 ...
- Log4j2配置文件详解
目录[-] 1 系列目录 2 默认配置 3 第一个配置例子 4 复杂一点的配置 4.1 Appender之Syslog配置 4.2 Syslog及Syslog-ng相关配置(Fedora) 5 Log ...
- 【比赛打分展示双屏管理系统-专业版】Other.ini 配置文件解读以及排行榜界面及专家评语提交展示等具体配置
第一个问题:Other.ini配置文件的解读: 在软件根目录下,找到Other.ini配置文件,打开如下: 配置文件解读: iOrderIDOrXSID:默认为0,按照软件 选项/排行榜和奖项 的设置 ...
- log4j2配置文件log4j2.xml详解(转载)
此博文转载自阿豪聊干货:https://www.cnblogs.com/hafiz/p/6170702.html 一.背景 最近由于项目的需要,我们把log4j 1.x的版本全部迁移成log4j 2. ...
- Nginx 小入门记录 之 Nginx 配置文件解读(二)
上一小节主要是记录一些环境准备和Nginx的安装,接下来对Nginx基本配置进行记录. 查看配置文件安装记录 可以通过以下Linux命令进行查看: rpm -ql nginx rpm 是liunx的包 ...
- log4j2配置文件xml详细了解
log4j2配置文件xml详细了解 详细参考:https://www.cnblogs.com/new-life/p/9246143.html log4j 2.x版本不再支持像1.x中的.propert ...
- 从零开始Pytorch-YOLOv3【笔记】(一)配置文件解读
前言 这是github上的一个项目YOLO_v3_tutorial_from_scratch,它还有相应的blog对其详细的解读.机器之心翻译了他的tutorial:从零开始PyTorch项目:YOL ...
随机推荐
- 【beta】阶段 第七次 Scrum Meeting
每日任务 1.本次会议为第七次 Meeting会议: 2.本次会议在下午14:45,课间休息时间在陆大楼召开,召开本次会议为10分钟. 一.今日站立式会议照片 二.每个人的工作 (有work item ...
- 201521123122 《java程序设计》 第四周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 这个思维导图比较简单,详细内容点击此处 2. 书面作业 注释的应用 使用类的注释与方法的注释 ...
- 201521123095 《Java程序设计》第3周学习总结
,1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识组织起来.请使用纸笔或者下面的工具画出本周学习到的知识点.截图或者拍照上传. 2. 书面 ...
- 201521123117 《Java程序设计》第12周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...
- (java web后端方向)如何让你的简历为你争取到更多的面试机会,内容来自java web轻量级开发面试教程
我们在做培训时,会发现一个不合理的情况,一些程序员能力不错,在公司里也是技术牛人,但发出去的简历往往会石沉大海,没有回复.对于刚毕业的大学生或工作年限在2年之内的程序员,这个情况会更严重. 这种情况下 ...
- Map.containsKey方法——判断Map集合对象中是否包含指定的键名
该方法判断Map集合对象中是否包含指定的键名.如果Map集合中包含指定的键名,则返回true,否则返回false. public static void main(String[] args) { M ...
- JDBC第四篇--【数据库连接池、DbUtils框架、分页】
1.数据库连接池 什么是数据库连接池 简单来说:数据库连接池就是提供连接的. 为什么我们要使用数据库连接池 数据库的连接的建立和关闭是非常消耗资源的 频繁地打开.关闭连接造成系统性能低下 编写连接池 ...
- Nexus5/6刷 lineageos 过程
如题,好久没刷机,体验下lineageos 由于之前Xposed官方一直没支持7.x,就没更新 测试三方Xposed正常使用,记录下过程供参考 注意,刷机有风险,刷机前备份,可以使用钛备份 0x01: ...
- XML功能
REF:https://www.baidu.com/link?url=_-UY8rZVAORlesKTth0F7C8LbvXCL4lSwz6vmQVnTEgmT06NFGdoaD9FbuEQhR7xG ...
- Django实现内容缓存
1.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次的的后台操作,都会 ...