博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Log4j 2.x入门
阅读量:5988 次
发布时间:2019-06-20

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

hot3.png

一、引入Log4j 2.x.jar

要在项目中使用Log4j 2.x,首先得引入Log4j 2.x所必须的jar包:

log4j-api-2.2.jarlog4j-core-2.2.jar

直接下载,解压到任意目录,找到上述两个jar包,并将它们加入到classpath中即可。也可以使用Maven管理jar包,只需要找到pom.xml文件,并将以下配置添加到依赖列表:

  
    
org.apache.logging.log4j
    
log4j-api
    
2.2
  
  
    
org.apache.logging.log4j
    
log4j-core
    
2.2
  

更多其它环境配置方式,参见官网:

二、配置log4j2.xml

jar包引入后,需要在classpath下加入一个配置文件,文件名称为log4j2.xml。这个名称还可以设置为log4j.jsn、log4j2.yml、log4j2-test.xml、log4j-test.jsn、log4j2-test.yml等。

如果你没有提供任何有效的配置文件,很有可能看到下面的提示:

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.

由于没有找到任何有效的配置文件,log4j2将使用默认配置:只记录错误信息到控制台。Log4j2的默认配置等价于下面的配置:

  
    
      
      
  
    
      
      

这里牵扯出两个概念:

1、输出源(Appender)

输出源是日志输出的目的地,可以是控制台、文件、输出流、数据库等等。Log4j2提供了十几种输出源类型,不同的输出源又有各种配置项,可以说基本能满足项目需求。

2、日志器(Logger)

日志器负责打印日志,每个日志器都会有一个独有name属性。Log4j2有一套维护各个日志器关系的规则,这个规则类似于Java中的包(package)。举例来说,如果一个日志器的name为"com.foo.ChildLogger",而另一个日志器的名称是"com.foo",那么后者就是前者的父级,后者的配置对于前者同样适用。

从上面的默认配置可以看出,Log4j2的配置文件大致结构为以Configuration为根节点,其下有Appenders和Loggers子节点,分别用于列出输出源和日志器。每一个输出源均设置一个name属性,用于标识其唯一性,以便日志器将其设置为输出源。

三、几种常用的输出源(Appender)

1、ConsoleAppender

ConsoleAppender会通过System.out或System.err将日志输出到控制台,默认情况下使用的是System.err,可以通过设置target属性来控制使用System.out。

2、FileAppender

FileAppender是将日志输出到fileName属性所定义的文件中。默认情况,日志会被以追加的方式输出到日志文件中,但也可以通过设置append属性为false,使得每次输出日志都会先清除已有的日志内容。

3、RollingFileAppender

RollingFileAppender也是将日志输出到fileName属性所定义的文件中的输出源,与FileAppender不同的是,当满足一定的条件——以TriggeringPolicy属性设置条件,就会重新以某种规则新建一个日志文件,文件的命名规则由filePattern属性设置。

当然,任何一种输出源都会有一个name属性,这个属性可用于日志器配置输出源时使用。更多的输出源及详细的可配置属性可以参看Log4j 2.x的官网: ,这里不再一一列出。

四、日志格式化Layout

Log4j 2.x在输出日志时允许用户自定义格式,也可以在配置文件中设置以某种日志格式输出。每一个输出源都有一个日志格式的属性配置,属性名为layout,取值为指定的日志格式类。最常用的日志格式类莫过于PatternLayout,它有着相当丰富的格式符:

  • %c{n.m.~.~} 、%C{n.m.~.~}   日志器名称占位符,它是日志器类名的占位符,如果不提供层级控制({...}),默认打印全路径。指定层级的控制中,n和m分别表示该位置包名的打印长度,~表示显示成~。比如日志器名称为com.apache.logging.demo.LoggerTest,则%c{1.2.~.~}的打印结果就是c.ap.logging.~.~.LoggerTest。

  • %d{yyyy-MM-dd HH:mm:ss}    日期占位符,以指定格式输出日志打印时间点。除了可以使用所有SimpleDateFormat可以使用的占位符,还可以使用各个时区的标识,比如DEFAULT、ISO8601ISO8601_BASIC、ABSOLUTE、DATE、COMPACT、UNIX、UNIX_MILLIS等等。

  • %enc{pattern}、%encode{pattern}    对日志编码输出,参数为一个完整的日志格式,但在打印日志时,会将该日志消息中的某些特殊字符转义。比如%enc{%msg},如果要打印的是“<script></script>”,那么结果就是转义后的消息:“&lt;script&gt;&lt;&#x2F;script&gt;”。

  • %F、%file    输出日志打印器所在的文件名,比如Log4j.java等。

  • %l、%location    输出该条日志打印发生时所在的位置,包含包名、类名、方法名、所在文件、所在行数等等。

  • %L、%line    输出该条日志打印发生时所在的行号。

  • %m、%msg、%message    输出该条日志的消息内容,也就是调用Logger.info、Logger.debug等方法时传给的第一个参数。

  • %M、%method    输出该条日志打印发生时所在的方法名。

  • %n    换行符,各个系统下换行符不一致,通过%n来输出换行符。

  • %p、%level    打印该条日志的级别,比如INFO、DEBUG、ERROR等。也可以通过参数给这些日志级别起别名,比如%p{INFO=信息, DEBUG=调试, ERROR=错误, FATAL=致命, ALL=全部}。

  • %replace{pattern}{regex}{substitution}    这个格式符就像是String的replace函数,第一个参数定义消息打印格式,第二参数是一个正则表达式,格式符将消息中符合这个正则的字符串子串替换为第三个参数,比如%replace{%d}{\d}{0},将打印消息中所有的数字替换为0。

  • %t、%thread    输出日志打印器打印时所在的线程名。

  • %%    输出一个%。

有时,我们希望日志消息能有一定的对齐方式,比如消息layout为“%p %m”,由于日志级别有ALL、INFO、DEBUG等,它们或三个字符,或四个字符,甚至五个字符。就会导致日志参差不齐。Log4j 2.x也提供了一种格式符来解决这个问题,那就是通过在%和格式符之间插入指定数字来控制该格式符结果的长度,如果长度过长则截取,过短则使用空格填充。数字可以为负数,负数表示左对齐右补空格,整数表示右对齐左补空格。比如:

%-5level %m

则打印结果很可能如下:

INFO__消息DEBUG_消息ERROR_消息

为方便查看,空格以下划线代替,可以看出INFO由于不足五个字符,在左对齐的同时,右侧补了一个空格。如果数字为整数:

%5level %m

则打印结果可能如下:

_INFO_消息DEBUG_消息ERROR_消息

即在右对齐的同时,左侧补充一个空格。

也可以设置两个数字,以点号隔开,比如%-5.10m,它表示如果不足5个字符,则右对齐左补空格;但是如果超过了10个字符,则从左边开始截取,只留剩余的右侧的10个字符。

要了解更多的格式符或是Layout,可以参看Log4j 2.x官网的这个页面:

五、日志过滤器Filter

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://my.oschina.net/treenewbee/blog/489959

你可能感兴趣的文章
网上找的模拟POST提交上传图片类
查看>>
SqlHelper
查看>>
AUTOCAD自学教程一
查看>>
VC多线程编程
查看>>
Configuring log4net with VS2010 and .Net 4.0
查看>>
html is for what
查看>>
JavaScript 获得鼠标坐标
查看>>
目录文件Oracle11g彻底删除
查看>>
删除androidAndroid递归方式删除某文件夹下的所有文件
查看>>
CSS overflow 属性
查看>>
第10次实验任务
查看>>
java中的设计模式一 装饰模式
查看>>
作用域及可见性
查看>>
PL/pgSQL学习笔记之五
查看>>
Android 经验: 5555 端口会被 adb 误认为 emulator
查看>>
Android手机便携式wifi的使用及无线数据传输(主要针对XP系统)
查看>>
MFC控件(8):command button与syslink control
查看>>
Java生成唯一GUID
查看>>
str_replace使用
查看>>
[Head First设计模式]一个人的平安夜——单例模式
查看>>