一、引入Log4j 2.x.jar

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

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

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

<dependencies><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.2</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.2</version></dependency>
</dependencies>

更多其它环境配置方式,参见官网:http://logging.apache.org/log4j/2.x/maven-artifacts.html

二、配置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的默认配置等价于下面的配置:

<?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>

这里牵扯出两个概念:

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的官网:http://logging.apache.org/log4j/2.x/manual/appenders.html ,这里不再一一列出。

四、日志格式化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;/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官网的这个页面:http://logging.apache.org/log4j/2.x/manual/layouts.html

五、日志过滤器Filter

Log4j 2.x入门相关推荐

  1. Log4j的快速入门

    LOG4J 学习 Log4j是Apache下的一款开源的日志框架,通过在项目中使用 Log4J,我们可以控制日志信息输出到控制台.文件.甚至是数据库中.我们可以控制每一条日志的输出格式,通过定义日志的 ...

  2. Java基础学习总结(42)——Log4j 2快速入门及Log4j 2 + Slf4j 的配置和使用

    1. 去官方下载log4j 2,导入jar包,基本上你只需要导入下面两个jar包就可以了(xx是乱七八糟的版本号): log4j-core-xx.jar log4j-api-xx.jar 2. 导入到 ...

  3. java中log4j的使用入门

    一.log4j是什么?有什么用? Log4j由非营利的阿帕奇软件基金会免费提供,已被下载数百万次,是一种从企业计算机网络.网站和应用程序中收集信息的广泛使用工具.该软件目前由阿帕奇的志愿者维护. Lo ...

  4. Apache Log4j使用实例

    Apache Log4j使用实例  原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.  Blog:  1.Logger类 通过Logger类的静 ...

  5. [Log4j] Log4j 的配置和配置文件加载顺序

    需求:  把log4j.properties 配置问题放置到工程外面的指定文件夹.  具体原因参考http://blog.csdn.net/lihe2008125/article/details/77 ...

  6. it Ebook 免费

    it Ebook 免费 [30天自制操作系统].(川合秀实).周自恒等.扫描版.pdf: http://www.t00y.com/file/60741230 [Apache服务器配置与使用工作笔记]. ...

  7. SSM整合+分页+Druid+CRU+log4J+junit+事务+Json+Bootstrap入门教程总览目录

    总目录 1.快速入门SSM整合配置建立第一个SSM项目模板 https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/85052628 2.实 ...

  8. Log4J入门教程(一) 入门例程

    1 转载地址 http://blog.csdn.net/lengyuhong/article/details/5832799 2 内容 Log4J的入门简介学习 简介: Log4j是Apache的一个 ...

  9. Log4J入门教程(三) maven构建

    一.入门实例 1. 新建一个maven Java工程,导入Log4j包,pom文件中对应的配置代码如下: <!-- log4j support --> <dependency> ...

最新文章

  1. 在kotlin companion object中读取Bean,注入Bean对象
  2. 求链表倒数第k个结点
  3. linux使jdk开机可用_JDK 11的一般可用性
  4. 如何计算一年总共有多少周_一年有几个周?怎么计算周数及闰年?
  5. 数据库操作php,一个数据库操作PHP类
  6. 华为成功完成中国联通NFV三层解耦测试验证
  7. 每天一道剑指offer-翻转单词顺序列
  8. Error:(199) undefined reference to `__android_log_print'
  9. 安川机器人如何注释化指令_安川机器人命令介绍
  10. KODI(XBMC)-基于树莓派的媒体中心使用-Libreelec
  11. iOS 【陀螺仪 自身旋转角水平面夹角 问题】
  12. 拼多多进军社区团购 店宝宝:巨头竞争加剧
  13. linux mint运行速度,Linux Mint 19 Tara Cinnamon启动应用速度将会更快
  14. open ai gpt_GPT-3:第一个人工智能?
  15. 阿里腾讯暑期实习面试被刷的经历
  16. 高新技术企业认定领域细分有几项
  17. Memory Compiler
  18. 验证JDK是否安装成功
  19. 谷歌最新的百分比布局库的示例项目
  20. 《Undocumented Windows 2000 Secrets》翻译 --- 第一章(2)

热门文章

  1. 论文当中图片保存png、pdf等等的要分辨率DPI
  2. 在gerrit上cherry pick多笔提交到一个仓库中
  3. GPU显存占满利用率GPU-util奇低
  4. Kotlin 协程探索
  5. mysql中的left和right
  6. 水溶性CY3.5-马来酰亚胺,Sulfo-Cyanine3.5 maleimide
  7. android fm信号强度,FM 收音机灵敏度测试方法
  8. 鸡尾酒排序算法c语言源代码,排序算法之鸡尾酒排序
  9. 天龙八部OL登录器编写之创建快捷方式
  10. 用这个工具,让人抓狂的领导驾驶舱报表五步搞定