记下依赖包
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.6</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
log4j 有三个核心功能
- 日志信息的优先级
- 日志信息的输出目的地
- 日志输出的格式
而使用配置文件不仅会减轻工作量,而且可以使程序更加灵活
定义配置文件主要有两种方式
- 使用 Java 的特性文件,即右键工程名 new 一个名为 log4j.properties 的文件
这个文件不同的 IDE,不同的项目放在不同的地方,有人说 src 同级, 也有人说
在 src/main/java 下,还有人说放在 src/main/resource。具体对象,具体讨论
- 使用 xml 文件,具体怎么配置,我还没有试过。
语法
1.根类别(在类别层次的顶部,即全局性的日志级别)
配置根 Logger
log4j.rootLogger = [ level ], appenderName, appenderName,...
- level 是日志记录的类别
从高到低依次排序
关键字 | 用途 |
---|---|
OFF | 最高级别,关闭所有日志 |
FATAL | 每个错误事件将会导致退出应用程序,这个时候可以停止应用程序了 |
ERROR | 虽然发生错误事件,但是不影响系统的继续运行。打印错误异常和信息,如果不需要打印太多,可以使用这个级别 |
WARN | 会出现潜在错误信息,有些信息不是错误信息,但是需要给程序员一些提示 |
INFO | 消息在粗粒度级别上突出强调应用程序的运行过程,打印一些感兴趣或者重要的信息。这个可以用于生产环境中输出程序的一些重要信息,但是不能滥用 |
DEBUG | 指出细粒度事件对于调试还是费城有帮助的,主要打印一些在开发过程中打印一些运行信息 |
TRACE | 很低级别的日志,一般不会用 |
ALL | 级别最低,打印所有日志 |
log4j 推荐只使用 ERROR, WARN, INFO, DEBUG
通过定义级别,只有比这个高的级别可以打印出来
- appenderName 指定日志发送到哪个地方,可以同时指定多个输出地
例如:
log4j.rootLogger=INFO,stdout,Runlog,Errorlog
DEBUG 级别日志将会被屏蔽,输出的目的地有三个, stdout 、Runlog 和 Errorlog
2.配置日志的目的地
- log4j.appender.appenderName = fully.qualified.name.of.appender.class
fully.qualifled.name.of.appender.class 是你日志发送目的地的类型
样式是:org.apache.log4j.XXXXXX
这里说几个常用的
XXXXXX | 类型 | 实际使用 |
---|---|---|
ConsoleAppender | 控制台 | |
FileAppender | 文件 | |
DailyRollingFileAppender | 每天产生一个文件 | 当天之后日志文件就会被以xxx+昨天的日期来命名,也就是每天一个日志文件 |
RollingFileAppender | 文件到达指定大小产生一个新文件 | 当日志文件到底指定尺寸时,那么原来的日志文件将会被加上序号,例如xxx.1,值得注意的是,若是再超过指定尺寸(MaxFileSize)需要增加一个日志文件时,那么原来xxx.1的文件会加上1变成xxx.2。也就是说,数字越大的日志文件记录的日志时间越早! |
WriterAppender | 将日志以流的形式发送到任意指定地方 | ConsoleAppender和FileAppender的父类,一般不直接使用,而是会使用其子类,如ConsoleAppender |
net.SMTPAppender | 邮件 | |
jdbc.JDBCAppender | 数据库 |
还有一些:GUI组件,套接口服务器,NT 时间记录器,UNIX Syslog 守护进程等。
3.常用的输出格式
格式 | 意义 |
---|---|
-X号 | X 信息输出是左对齐 |
%p | 日志输出信息级别 |
%d{} | 日志信息产生的信息 |
%c | 日志信息产生的所在类名 |
%m | 日志产生的具体信息 |
%n | 输出日志信息换行 |
例如:
这个我相信不解释大家也能看得懂
log4j.appender.stdout.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n
log4j.appender.Runlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n
log4j.appender.Errorlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n
4.布局
log4j 提供四种布局
布局 | 形式 |
---|---|
org.apache.log4j.HTMLLayout | 以HTML表格形式布局 |
org.apache.log4j.PatternLayout | 可以灵活地指定布局模式 |
org.apache.log4j.SimpleLayout | 包含日志信息的级别和信息字符串 |
org.apache.log4j.TTCCLayout | 包含日志产生的时间、线程、类别等等信息 |
例如:
log4j.appender.stdout.layout=org.apache.log4j.HTMLLayout
这里给大家推荐一篇非常好的博客
Log4j扩展使用--输出地Appender
参考资料:
log4j的8个日志级别(OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL)
Log4j输出终端(Appender)详解