参考
https://www.cnblogs.com/ArtsCrafts/archive/2013/06/07/log4j5.html
maven
1 2 3 4 5
| <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
|
使用
1 2 3 4 5 6 7 8 9 10 11 12
| import org.apache.log4j.Logger; import org.junit.Test;
public class Test { private static Logger log = Logger.getLogger(Test.class.getClass()); @Test public void testLog(){ log.debug("debug"); log.error("error"); } }
|
log4j.properties
示例
重点:rootLogger 中第一个参数为输出日志的级别,是全局的。XXX.Threshold 是指定输出项的输出日志级别,是局部的。输出结果以两者中「更严格」的级别输出。 DEBUG - INFO - WARN- ERROR 严格程度依次递增
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| log4j.rootLogger=DEBUG,Console,Daily_Rolling
log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.Target=System.out log4j.appender.Console.Threshold=DEBUG log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%n
log4j.appender.Daily_Rolling=org.apache.log4j.DailyRollingFileAppender
log4j.appender.Daily_Rolling.Threshold=DEBUG
log4j.appender.Daily_Rolling.File=./logs/log4j.log
log4j.appender.Daily_Rolling.Append=true
log4j.appender.Daily_Rolling.DatePattern=.yyyy-MM-dd
log4j.appender.Daily_Rolling.layout=org.apache.log4j.PatternLayout log4j.appender.Daily_Rolling.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%C]-[%p] %m%n
log4j.logger.druid.sql=error log4j.logger.druid.sql.DataSource=error log4j.logger.druid.sql.Connection=error log4j.logger.druid.sql.Statement=debug log4j.logger.druid.sql.ResultSet=error
|
配置
输出地 Appender
Appender 为日志输出目的地,Log4j 提供的 appender 有以下几种:
- org.apache.log4j.ConsoleAppender(控制台)
- org.apache.log4j.FileAppender(文件)
- org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
- org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
- org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
- org.apache.log4j.jdbc.JDBCAppender(输出到数据库)
输出到控制台
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| log4j.rootLogger=ERROR,Console
log4j.category.com.log4j.test=DEBUG
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Threshold=DEBUG
log4j.appender.Console.Encoding=UTF-8
log4j.appender.Console.ImmediateFlush=true
log4j.appender.Console.Target=System.err
log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.ConversionPattern=%-d{yyyy-MM-d HH:mm:ss, SSS}[%C]-[%p] %m%n
|
输出到文件
1 2 3 4 5 6 7 8 9 10 11
| log4j.logger.com.log4j.test.Log4jTest=DEBUG, File
log4j.appender.File=org.apache.log4j.FileAppender
log4j.appender.File.File=./logs/log4j.log
log4j.appender.File.Append=true
log4j.appender.File.layout=org.apache.log4j.PatternLayout log4j.appender.File.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%C]-[%p] %m%n
|
输出为 HTML 文件
1 2 3 4 5 6 7 8 9 10
| log4j.rootLogger=DEBUG, HTML
log4j.appender.HTML=org.apache.log4j.FileAppender log4j.appender.HTML.File=./logs/log4j.log log4j.appender.HTML.Append=false
log4j.appender.HTML.Encoding=GBK
log4j.appender.HTML.layout=org.apache.log4j.HTMLLayout
|
输出到按大小滚动文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| log4j.rootLooger=DEBUG, Rolling_File
log4j.appender.Rolling_File=org.apache.log4j.RollingFileAppender
log4j.appender.Rolling_File.Threshold=DEBUG
log4j.appender.Rolling_File.File=./logs/log4j.log
log4j.appender.Rolling_File.Append=true
log4j.appender.Rolling_File.MaxFileSize=10MB
log4j.appender.Rolling_File.MaxBackupIndex=100 log4j.appender.Rolling_File.layout=org.apache.log4j.PatternLayout log4j.appender.Rolling_File.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%C]-[%p] %m%n
|
输出到按日期滚动文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| log4j.rootLooger=DEBUG, Daily_Rolling
log4j.appender.Daily_Rolling=org.apache.log4j.DailyRollingFileAppender
log4j.appender.Daily_Rolling.Threshold=DEBUG
log4j.appender.Daily_Rolling.File=./logs/log4j.log
log4j.appender.Daily_Rolling.Append=true
log4j.appender.Daily_Rolling.DatePattern=.yyyy-MM-dd
log4j.appender.Daily_Rolling.layout=org.apache.log4j.PatternLayout log4j.appender.Daily_Rolling.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%C]-[%p] %m%n
|
输出到 JDBC 数据库
创建数据库表
1 2 3 4 5 6 7
| create database log4j; use log4j; create table tb_log(id int primary key auto_increment, date varchar(255), priority varchar(255), message text, classname varchar(255));
|
配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| log4j.rootLogger=ALL, DATABASE
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender log4j.appender.DATABASE.Threshold=DEBUG
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/log4j
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=password
log4j.appender.DATABASE.sql=insert into tb_log(date, priority, message, classname) values('%d', '%p', '%m', '%c')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout log4j.appender.DATABASE.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%C]-[%p] %m%n
|
日志格式化器 Layout
Layout:日志输出格式,Log4j 提供的 layout 有以下几种:
- org.apache.log4j.HTMLLayout(以 HTML 表格形式布局)
- org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
- org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
- org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
PatternLayout 是最常用的格式化器
用户可以自定义输出信息,例如日期,时间,所在的线程,类名,文件名,方法名,信息级别,文件级别,文件行数
Log4j 中 ConversionPattern 常用的参数表:
参数 |
描述 |
实例 |
c |
输出 Logger 所在的类别 (即 Logger 的名字)。允许使用 % c {数字} 输出部分的名字 (从右边往左边数)。见实例 |
% c 将输出 com.log4j.Log4jTest% c {1} 将输出 Log4jTest% c {2} 将输出 log4j.Log4jTest% c {3} 将输出 com.log4j.Log4jTest |
C |
输出 Logger 所在类的名称有时候 Logger 的名称不同于类名,例如 Hibernate 中用 org.hibernate.SQL 作为所有输出 DML 语句的 Logger 的名称,便于控制。允许使用 % C {数字} 输出部分的名称 (从右边往左边)。见实例 |
% C 将输出 com.log4j.Log4jTest% C {1} 将输出 Log4jTest% C {2} 将输出 log4j.Log4jTest% C {3} 将输出 com.log4j.Log4jTest |
d |
输出日期。允许使用 % d {yyyy-MM-dd HH:mm:ss} 格式化日期。% d 不仅支持 JDKSimpleDateFormat 的日期格式,还支持 log4j 自己的日期格式,例如 ABSOLUTE,DATE,ISO8601 等 |
% d 将输出 2013-06-06 22:24:25,353% d {yyyy-MM-dd} 将输出 2013-06-06% d {ABSOLUTE} 将输出 22:24:25,353% d {DATE} 将输出 06 六月 2013 22:24:25,253 |
F |
输出所在的类文件名称 |
% F 将输出 Log4jTest.java |
l |
输出语句所在的行数,包括类名,方法名,文件名,行数等 |
% l 将输出 com.log4j.test.Log4jTest.main (Log4jTest.java:50) |
L |
输出语句所在的行数,只输出数字 |
% L 将输出 50 |
m |
输出日志 |
输出日志,即 log.info (“”),log.debug (“”) 参数 |
M |
输出方法名 |
% M 将输出 main |
n |
换行.Windows 下输出 \r\n,Linux 下输出 \n |
含行 |
p |
输出日志级别 (prioriry) |
DEBUG,INFO,ERROR,FITAL 等 |
r |
输出从程序启动到输出该日志之间的时间间隔,单位毫秒 |
% r 将输出 300 |
t |
输出当前的线程名称 |
% t 将输出 main,Thread-0,Thread-1 等 |
% |
%% 用来输出百分号 |
|
以 % p 为例,所有的调整格式见表:
格式 |
对齐方式 |
最小宽度 |
最大宽度 |
描述 |
实例 |
[%10p] |
右对齐 |
10 |
|
正数右对齐,最小宽度 |
[ ERROR] |
[%-10p] |
左对齐 |
10 |
|
负数左对齐,最小宽度 |
[ERROR ] |
[%.4p] |
|
|
4 |
最大宽度 |
[ERROR] |
[%10.20p] |
右对齐 |
10 |
20 |
正数右对齐,最大最小宽度 |
[ ERROR] |
[%-10.20p] |
左对齐 |
10 |
20 |
负数左对齐,最大最小宽度 |
[ERROR ] |