使用前需要做的准备:
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对象,我们就可以在代码中使用他了。
1 public class demo_log4j2 { 2 private static Logger logger = LogManager.getLogger(demo_log4j2.class.getName()); 3 public static void main(String[] args) { 4 System.out.println(demo_log4j2.class.getName()); //反射机制产生的代码 5 logger.trace("trace信息"); 6 logger.trace("boss"); 7 logger.debug("debug信息"); 8 logger.info("info信息"); 9 logger.warn("warn信息");10 logger.error("error信息");11 }12 13 }
日志的级别
在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输出的配置。 举例如下:
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:输出日志事件所提供的信息。
说了这么多,贴个详细的配置信息:
1 2 3 4 56 7 8 9 49 5010 11 13 1412 15 17 1816 20 21 2822 23 24 2725 26 30 3931 32 33 36 3734 35 38 41 4842 43 44 4745 46 51 52 6453 54 55 5756 58 6359 60 61 62
执行日志文件超过多大而重新新建日志文件结果如下:
本文仅代表作者观点,系作者@温一壶清酒发表。 欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 文章出处: