博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
log4j2配置文件解读
阅读量:5128 次
发布时间:2019-06-13

本文共 6439 字,大约阅读时间需要 21 分钟。

log4j2可以按照开发人员预先的设定,在指定的位置和情况下打印log语句,并且可以酌情关闭某些log语句,如开发阶段debug类型的语句等。并且,可以使用layout来定义输出语句的格式。

使用前需要做的准备:

  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输出的配置。 举例如下:

classpath指自己所建工程下target文件下test-classes的路径:

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
5
6
7
8
9
10
11
12
13
14
15
16
17
18
20
21
22
23
24
25
26
27
28
30
31
32
33
34
35
36
37
38
39
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
注意:${sys:user.home}指的是系统用户路径,在c盘

执行日志文件超过多大而重新新建日志文件结果如下:

 

本文仅代表作者观点,系作者@温一壶清酒发表。 欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 文章出处:

转载于:https://www.cnblogs.com/hong-fithing/p/7694196.html

你可能感兴趣的文章
C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现。
查看>>
牛的障碍Cow Steeplechase
查看>>
Zookeeper选举算法原理
查看>>
3月29日AM
查看>>
利用IP地址查询接口来查询IP归属地
查看>>
HTML元素定义 ID,Class,Style的优先级
查看>>
构造者模式
查看>>
http和https的区别
查看>>
Hbuild在线云ios打包失败,提示BuildConfigure Failed 31013 App Store 图标 未找到 解决方法...
查看>>
找到树中指定id的所有父节点
查看>>
今天新开通了博客
查看>>
AS3优化性能笔记二
查看>>
ElasticSearch(站内搜索)
查看>>
4----COM:a Generative Model for group recommendation(组推荐的一种生成模型)
查看>>
UVA 11137 - Ingenuous Cubrency
查看>>
js阻止事件冒泡的两种方法
查看>>
Java异常抛出
查看>>
[SQL Server 系] T-SQL数据库的创建与修改
查看>>
74HC164应用
查看>>
变量声明和定义的关系
查看>>