log4j简介
日志的作用
- 可分析程序执行过程,便于调试
- 可将业务数据存储到文件、数据库,便于后期分析
log4j是一个功能强大的日志框架
- 可以将日志信息输出到控制台、文件、GUI 组件、数据库中
- 可以指定日志输出格式
log4j的日志级别
一共七种,从高到低依次为
- OFF 最高日志级别,即关闭日志
- FATAL 导致应用程序退出的错误
- ERROR 运行发生错误,但不影响程序继续运行
- WARN
- INFO
- DEBUG
- ALL
一般只使用4个级别,从高到低为 ERROR > WARN > INFO > DEBUG
log4j的组成
log4j 主要由三部分组成
1、Loggers 日志记录器
控制是否输出日志、日志输出级别
2、Appenders 输出端
指定日志输出终端
-
ConsoleAppender 控制台
-
FileAppender 文件
-
JDBCAppender 数据库
-
RollingFileAppender 文件,可指定文件最大尺寸,当文件大小达到指定最大尺寸时,会创建一个新文件来保存日志
#指定单个日志文件的最大尺寸
MaxFileSize = 2KB
#指定最大备份数(日志文件最多允许保留多少个)
MaxBackupIndex = 5
- DailyRollingFileAppender 文件,将特定时间段输出到一个新的文件
#指定输出周期,将一周的日志输出到一个文件中
DatePattern='.'yyyy-ww
yyyy-MM 每月
yyyy-ww 每周
yyyy-MM-dd 每天
yyyy-MM-dd-a 每天两次
yyyy-MM-dd-HH 每小时
yyyy-MM-dd-HH-mm 每分钟
3、Layout 日志格式化器
用于指定日志输出格式
- HTMLLayout html表格
- SimpleLayout 简单格式
- PatternLayout 可自定义日志输出格式
PatternLayout使用占位符指定格式,常用的占位符如下
- %m 代码中指定的日志信息
- %p 日志级别,eg. DEBUG、INFO
- %n 换行
- %c 所在类的类名
- %t 所在的线程名
-
- %F 所在文件的文件名
- %L 所在行号
- %l 所在位置,类名+线程名+文件名+行号,eg. UserService.main(UserService.java:10)
- %d 服务器当前时间,可在{ }中指定时间格式,eg. %d{yyyy年MM月dd日 HH:mm:ss}
- %% 输出一个 %
可指定宽度、对齐方式,eg
- %5p 宽度是5,字符个数小于5时,右对齐
- %-5p 左对齐
log4j的使用
依赖
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- 如果是在其它框架中使用log4j,往往需要引入commons-logging -->
<!-- commons-logging是日志接口,log4j是其中的一种实现 -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
log4j.properties
### 日志记录器Logger的全局设置,最低级别指定为DEBUG ###
log4j.rootLogger = DEBUG,stdout,D,E
### 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
#输出级别
log4j.appender.stdout.Threshold = DEBUG
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出到文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File =D://log/debug/debug.log
log4j.appender.D.Append = true
#输出级别
log4j.appender.D.Threshold = ERROR
log4j.appender.D.DatePattern='.'yyyy-ww
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
在java代码中输出日志
class Xxx{
// 获取当前类的Logger对象,注意导入的Logger是log4j中的
private static Logger logger = Logger.getLogger(Xxx.class);
public void xxx() {
logger.info("xxx");
logger.warn("xxx");
logger.error("xxx");
}
}
附:slf4j的使用
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
// 这个Logger导入的是slf4j中的类
private static Logger logger = LoggerFactory.getLogger(Xxx.class);