Log4j 2.x入门
一、引入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>”,那么结果就是转义后的消息:“<script></script>”。
%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入门相关推荐
- Log4j的快速入门
LOG4J 学习 Log4j是Apache下的一款开源的日志框架,通过在项目中使用 Log4J,我们可以控制日志信息输出到控制台.文件.甚至是数据库中.我们可以控制每一条日志的输出格式,通过定义日志的 ...
- Java基础学习总结(42)——Log4j 2快速入门及Log4j 2 + Slf4j 的配置和使用
1. 去官方下载log4j 2,导入jar包,基本上你只需要导入下面两个jar包就可以了(xx是乱七八糟的版本号): log4j-core-xx.jar log4j-api-xx.jar 2. 导入到 ...
- java中log4j的使用入门
一.log4j是什么?有什么用? Log4j由非营利的阿帕奇软件基金会免费提供,已被下载数百万次,是一种从企业计算机网络.网站和应用程序中收集信息的广泛使用工具.该软件目前由阿帕奇的志愿者维护. Lo ...
- Apache Log4j使用实例
Apache Log4j使用实例 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. Blog: 1.Logger类 通过Logger类的静 ...
- [Log4j] Log4j 的配置和配置文件加载顺序
需求: 把log4j.properties 配置问题放置到工程外面的指定文件夹. 具体原因参考http://blog.csdn.net/lihe2008125/article/details/77 ...
- it Ebook 免费
it Ebook 免费 [30天自制操作系统].(川合秀实).周自恒等.扫描版.pdf: http://www.t00y.com/file/60741230 [Apache服务器配置与使用工作笔记]. ...
- SSM整合+分页+Druid+CRU+log4J+junit+事务+Json+Bootstrap入门教程总览目录
总目录 1.快速入门SSM整合配置建立第一个SSM项目模板 https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/85052628 2.实 ...
- Log4J入门教程(一) 入门例程
1 转载地址 http://blog.csdn.net/lengyuhong/article/details/5832799 2 内容 Log4J的入门简介学习 简介: Log4j是Apache的一个 ...
- Log4J入门教程(三) maven构建
一.入门实例 1. 新建一个maven Java工程,导入Log4j包,pom文件中对应的配置代码如下: <!-- log4j support --> <dependency> ...
最新文章
- 在kotlin companion object中读取Bean,注入Bean对象
- 求链表倒数第k个结点
- linux使jdk开机可用_JDK 11的一般可用性
- 如何计算一年总共有多少周_一年有几个周?怎么计算周数及闰年?
- 数据库操作php,一个数据库操作PHP类
- 华为成功完成中国联通NFV三层解耦测试验证
- 每天一道剑指offer-翻转单词顺序列
- Error:(199) undefined reference to `__android_log_print'
- 安川机器人如何注释化指令_安川机器人命令介绍
- KODI(XBMC)-基于树莓派的媒体中心使用-Libreelec
- iOS 【陀螺仪 自身旋转角水平面夹角 问题】
- 拼多多进军社区团购 店宝宝:巨头竞争加剧
- linux mint运行速度,Linux Mint 19 Tara Cinnamon启动应用速度将会更快
- open ai gpt_GPT-3:第一个人工智能?
- 阿里腾讯暑期实习面试被刷的经历
- 高新技术企业认定领域细分有几项
- Memory Compiler
- 验证JDK是否安装成功
- 谷歌最新的百分比布局库的示例项目
- 《Undocumented Windows 2000 Secrets》翻译 --- 第一章(2)