Log4j2的基本使用
Log4j2是Log4j1.x的的升级版,其中也有很大的不同,最大的区别就是由以前的properties配置文件改为xml/json/yaml配置文件。
其中配置文件的位置官方说明如下:
- Log4j will inspect the "log4j.configurationFile" system property and, if set, will attempt to load the configuration using the ConfigurationFactory that matches the file extension.
- If no system property is set the YAML ConfigurationFactory will look for log4j2-test.yaml or log4j2-test.yml in the classpath.
- If no such file is found the JSON ConfigurationFactory will look for log4j2-test.json or log4j2-test.jsn in the classpath.
- If no such file is found the XML ConfigurationFactory will look for log4j2-test.xml in the classpath.
- If a test file cannot be located the YAML ConfigurationFactory will look for log4j2.yaml or log4j2.yml on the classpath.
- If a YAML file cannot be located the JSON ConfigurationFactory will look for log4j2.json or log4j2.jsn on the classpath.
- If a JSON file cannot be located the XML ConfigurationFactory will try to locate log4j2.xml on the classpath.
- If no configuration file could be located the DefaultConfiguration will be used. This will cause logging output to go to the console.
它会依次查找可能存在的配置文件,也可自定义配置文件的路径。可设置System.setProperty("log4j.configurationFile", path);来自定义配置文件的路径。注意:默认配置文件会查找以log4j2命名的文件。
配置文件以<Configuration></Configuration>为根节点。可设置其默认的日志输出级别status,可输入的值可为 "trace", "debug", "info", "warn", "error" and "fatal"。也可以设置其自动循环执行配置文件的时间monitorInterval,默认是5s。
log4j2的配置文件会有几个必须的节点,Appenders和Root。Appenders配置是其输出的日志形式,有log文件输出/控制台输出/数据库写入/消息发送等方式。以控制台输出为例,其配置如下:
<?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>
Appender
其中Appender有很多种方法,常用的例如异步AsyncAppender、控制台ConsleAppender、救援FailoverAppender、文件FileAppender、数据库JDBCAppender、滚动文件RollingFileAppender等。
异步AsyncAppender不是单独配置的,而是引用其他已配置的Appender。它多用于不同线程操作日志的情况。配置格式如下:
<File name="MyFile" fileName="logs/app.log">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
</File>
<Async name="Async">
<AppenderRef ref="MyFile"/>
</Async>
救援FailoverAppender是包裹其他的appender使用的。它的用处是当第一个Appender失效的时候,就执行第二个Appender,以此类推直到没有Appender可执行了。配置如下:
<Appenders>
<RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app-%d{MM-dd-yyyy}.log.gz"
ignoreExceptions="false">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<TimeBasedTriggeringPolicy />
</RollingFile>
<Console name="STDOUT" target="SYSTEM_OUT" ignoreExceptions="false">
<PatternLayout pattern="%m%n"/>
</Console>
<Failover name="Failover" primary="RollingFile">
<Failovers>
<AppenderRef ref="Console"/>
</Failovers>
</Failover>
</Appenders>
文件FileAppender是一种输出流的方式输出日志文件的。格式如下:
<Appenders>
<File name="MyFile" fileName="logs/app.log">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
</File>
</Appenders>
数据库JDBCAppender是把错误日志信息根据配置存储到数据库中,两种格式如下:
<Appenders>
<JDBC name="databaseAppender" tableName="dbo.application_log">
<DataSource jndiName="java:/comp/env/jdbc/LoggingDataSource" />
<Column name="eventDate" isEventTimestamp="true" />
<Column name="level" pattern="%level" />
<Column name="logger" pattern="%logger" />
<Column name="message" pattern="%message" />
<Column name="exception" pattern="%ex{full}" />
</JDBC>
</Appenders>
<Appenders>
<JDBC name="databaseAppender" tableName="LOGGING.APPLICATION_LOG">
<ConnectionFactory class="net.example.db.ConnectionFactory" method="getDatabaseConnection" />
<Column name="EVENT_ID" literal="LOGGING.APPLICATION_LOG_SEQUENCE.NEXTVAL" />
<Column name="EVENT_DATE" isEventTimestamp="true" />
<Column name="LEVEL" pattern="%level" />
<Column name="LOGGER" pattern="%logger" />
<Column name="MESSAGE" pattern="%message" />
<Column name="THROWABLE" pattern="%ex{full}" />
</JDBC>
</Appenders>
第二种方法配置了Connection工厂类以及获取Connection的方法。该Connection是JDBC连接数据库的java.sql.Connection。
滚动文件RollingFileAppender是根据配置生成多文件的方法。它提供了一些文件的触发方法和生成格式。示例如下:
<Appenders>
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="250 MB"/>
</Policies>
</RollingFile>
</Appenders>
其中fileName是默认当前日志的名称。filePattern是多日志生成的命名规则。它依赖于日志的生成规则。可根据SimpleDateFormat的格式化日期或者%i整型计数等方式命名文件名。触发规则Policies有三种方式:
<Policies>
<OnStartupTriggeringPolicy />
<SizeBasedTriggeringPolicy size="20 MB" />
<TimeBasedTriggeringPolicy />
</Policies>
OnStartup规则没有参数,如果当前日志文件比JVM的时间要迟,就会触发,生成新的日志。
SizeBased有一个参数size,即文件日志大小。当日志文件到达这个大小的时候,就会生成新的日志文件。后缀可为KB、MB、GB。
TimeBased是基于时间触发的周期性的保存日志,它有两个参数,interval:触发时间,单位为日志filePattern时间命名的的精度单位,默认是1。modulate:布尔类型。说明是否对日志生成时间进行调制。若为true,则日志时间将以0点为边界进行偏移计算。例如第一次日志保存时间是3点,modulate为true,interval是4h。那么下次生成日志时间是4点,08:00,12:00……
默认的文件生成规则DefaultRolloverStrategy。它有4个参数:
fileIndex:文件索引。
min:文件最小数量,默认是1;
max:文件最大数量。一旦达到这个最大数,以前的文档就会在下一轮生成日志的时候删除。
compressionLevel: 日志压缩级别。0-9,压缩效果依次增大。只对于压缩文件类型有效。<DefaultRolloverStrategy max="20"/>
文件的压缩格式支持的后缀名:".gz",".zip",".bz2",".xz"
Layout
layout是日志文件的布局格式。支持的格式比较多,有CSV/JSON/HTML/RFC-5424/pattern/XML等等,用法大同小异。以常用的pattern、HTML为例:
pattern是最常用也是比较简单的方式生成日志格式。它可以使用\t,\n,\r,\f用来分割排列信息。使用%加一些特定的英文单词输出日志详细描述。
比较常用的有:
%c: Logger的名称。它可以接受一个整型的参数。规则如下:
Conversion Pattern | Logger Name | Result |
---|---|---|
%c{1} | org.apache.commons.Foo | Foo |
%c{2} | org.apache.commons.Foo | commons.Foo |
%c{1.} | org.apache.commons.Foo | o.a.c.Foo |
%c{1.1.~.~} | org.apache.commons.test.Foo | o.a.~.~.Foo |
%c{.} | org.apache.commons.test.Foo | ....Foo |
%d:日志事件的时间。参考示例如下:
Pattern | Example |
---|---|
%d{DEFAULT} | 2012-11-02 14:34:02,781 |
%d{ISO8601} | 2012-11-02T14:34:02,781 |
%d{ISO8601_BASIC} | 20121102T143402,781 |
%d{ABSOLUTE} | 14:34:02,781 |
%d{DATE} | 02 Nov 2012 14:34:02,781 |
%d{COMPACT} | 20121102143402781 |
%d{HH:mm:ss,SSS} | 14:34:02,781 |
%d{dd MMM yyyy HH:mm:ss,SSS} | 02 Nov 2012 14:34:02,781 |
%d{HH:mm:ss}{GMT+0} | 18:34:02 |
%d{UNIX} | 1351866842 |
%d{UNIX_MILLIS} | 1351866842781 |
ex|exception|throwable
{["none"
|"full"
|depth
|"short"
|"short.className"
|"short.fileName"
|"short.lineNumber"
|"short.methodName"
|"short.message"
|"short.localizedMessage"]}:输出一个异常日志,后面可以带指定的字符串。默认输出信息是Throwable.printStackTrace()。
%m/%msg/%message:输出日志事件所提供的信息。
%n:日志换行。
%level:日志级别。
%t:当前生成日志事件的线程。
HTMLLayout是将日志文件生成一个HTML文件,它的好处是可以通过浏览器浏览。它是以table生成日志信息的。
可接收4个配置参数:
charset:文档类型,默认是utf-8。
contentType:用于申明文件头。默认是“text/html”。
locationInfo:布尔类型。如果为true的话。文件名和行数会写入到html中。默认是false。
title: html文件的标题。
Filter
配置日志的filter可以控制输出日志的类型。以ThresholdFilter为例,它是过滤日志级别的过滤器,允许通过的日志输出,不允许的不输出。它有三个参数:
level:配对的级别,即该级别的名称。
onMatch: 符合条件的级别。可填写: ACCEPT, DENY or NEUTRAL. 默认是NEUTRAL。
onMisMatch:不符合的级别。可填写: ACCEPT, DENY or NEUTRAL. 默认是DENY。
示例:
<Appenders>
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">
<ThresholdFilter level="TRACE" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout>
<pattern>%d %p %c{1.} [%t] %m%n</pattern>
</PatternLayout>
<TimeBasedTriggeringPolicy />
</RollingFile>
</Appenders>
这样配置之后,该log日志文件只会输出比trace更高级别或者同等级别的日志了。
最后说下配置需要注意的事项:
1.每个配置都需要一个root节点,root节点可以配置日志的级别,所有的Appender要配置到root中才能生效。
2.可以配置独立的Logger,设置其level以及additivity,addivity是布尔值,代表是否遵从log4j2的日志输出级别。
3.log4j2的日志级别:ALL<DEBUG<INFO<WARN<ERROR<FATAL。 日志输出遵从这样的级别,假设当前设置的日志输出级别是WARN,那么高于或者等于WARN级别的日志都会被输出,所以如果想把特定类型的日志写入到单独的日志文件中,需要做一个filter的过滤,不然高于配置级别的日志都会被输入到该文件中。
Log4j2的基本使用的更多相关文章
- dubbox升级spring到4.x及添加log4j2支持
今天花了点时间,把dubbox依赖的spring从3.x升级成最新版的4.x了,其它一些依赖的组件也顺带升级了,同时dubbo支持的第三方日志组件居然没有log4j2,加了点代码也一并支持了,蛋疼的是 ...
- 聊一聊log4j2配置文件log4j2.xml
一.背景 最近由于项目的需要,我们把log4j 1.x的版本全部迁移成log4j 2.x 的版本,那随之而来的slf4j整合log4j的配置(使用Slf4j集成Log4j2构建项目日志系统的完美解决方 ...
- 使用Slf4j集成Log4j2构建项目日志系统的完美解决方案
一.背景 最近因为公司项目性能需要,我们考虑把以前基于的log4j的日志系统重构成基于Slf4j和log4j2的日志系统,因为,使用slf4j可以很好的保证我们的日志系统具有良好的兼容性,兼容当前常见 ...
- log4j2.xml实用例子
一个多月前,我写了篇关于log4j.xml配置的文章,点击此处查看:http://www.cnblogs.com/guogangj/p/3931397.html 最近,我把自己的log4j升级到2.0 ...
- log4j2 不使用配置文件,动态生成logger对象
大家平时使用Log4j一般都是在classpath下放置一个log4j的配置文件,比如log4j.xml,里面配置好Appenders和Loggers,但是前一阵想做某需求的时候,想要的效果是每一个任 ...
- Log4j2 - 配置
官方文档:http://logging.apache.org/log4j/2.x/index.html 1 概述 Log4j2的配置包含四种方式,其中3种都是在程序中直接调用Log4j2的方法进行配置 ...
- MyBatis - MyBatis使用log4j2显示sql和结果集
mybatis-config.xml <settings> <setting name="logImpl" value="LOG4J2" /& ...
- web项目 log4j2的路径问题
项目中用到log4j2记录日志,结果运行的时候总也不见log文件的产生. 查看官方文档得知,在web项目中使用log4j2需要加入log4j-web包 log4j2.xml <?xml vers ...
- 在java下使用log4j2记录日志
1.定义: log4j2 指log4j 2.X及以上版本 2.安装 log4j-core-xx.jarlog4j-api-xx.jarlog4j-web-xx.jar(web项目的需要引用) 3.配置 ...
- log4j2配置详解
1. log4j2需要两个jar log4j-api-2.x.x.jar log4j-core-2.x.x.jar .log4j和log4j2有很大的区别,jar包不要应错. 2. ...
随机推荐
- 使用简单的python语句编写爬虫 定时拿取信息并存入txt
# -*- coding: utf-8 -*- #解决编码问题import urllibimport urllib2import reimport osimport time page = 1url ...
- Python 字符串转换为字典(String to Dict)
一.需求 为了处理从redis中拿到的value,如下 {"appId":"ct","crawlSts":false,"healt ...
- C# 自动发送邮件被系统当做垃圾邮件退回的处理方法
前两天做了一个发送邮件的定时任务.其功能为在每天的某一时刻,系统自动从银行查询前一天的交易明细到本地服务器,解析后生成为各自不同Excel文件,并打包成zip压缩文件,然后抄送附件给财务对账.其中,邮 ...
- php session和cookie知识
- java并发编程之三--CyclicBarrier的使用
CyclicBarrier 允许一组线程全部等待彼此达到共同屏障点的同步辅助. 循环阻塞在涉及固定大小的线程方的程序中很有用,这些线程必须偶尔等待彼此. 屏障被称为循环 ,因为它可以在等待的线程被释放 ...
- 小程序和ThinkPHP5结合实现登录状态(含代码)
本篇文章给大家带来的内容是关于小程序和ThinkPHP5结合实现登录状态(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 微信小程序中,一般会涉及三种登录方式: 1. 使用微 ...
- Ubuntu16.04怎样安装Python3.6
Ubuntu16.04默认安装了Python2.7和3.5 请注意,系统自带的python千万不能卸载! 输入命令python
- 第三课 操作系统开发之x86模拟环境搭建
前面我们讲解了主引导程序的加载过程,并且制作了虚拟软盘a.img,最终这个主引导程序也在机器中成功运行了,但是实际开发的时候,并不会如此简单,免不了调试过程,如果还像上一节中直接将软盘放到机器中去加载 ...
- [LeetCode&Python] Problem 557. Reverse Words in a String III
Given a string, you need to reverse the order of characters in each word within a sentence while sti ...
- 代理模式及Spring AOP (二)
一.Spring AOP 1.1 Spring AOP 底层还是用的动态代理.如果目标对象所对应的类有接口,spring就用jdk生成代理对象: 如果目标对象所对应的类没有接口,spring就用C ...