日志记录是Java开发中一个非常重要的部分,一份详细精确的日志记录,能够让我们快速地排查系统运行中所出现的问题,大大地提升我们的开发效率。
什么是Slf4j和Log4j
如果是初学者看到这两个名字,或者知道他们是和日志记录有关的类库,但是又搞不清楚两者之间的关系?
首选,我们先从名字来说起,这两个类库的名字都有一个共同的地方,那就是4j
,其实4j
就是for java
的缩写,这两个类库的全称其实是Slf for java
和Log for java
,简而言之,就是Java的日志记录类库。
其中Slf4j是一个日志记录的API接口,而Log4j则是底层的具体实现,我们在一般使用的时候,都会直接使用Slf4j为我们提供的日志记录的接口,至于底层实现,我们只需要引入Log4j的依赖即可。
1 2 3 4 5
| <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> </dependency>
|
在这个依赖中,Slf4j又自动依赖了Log4j的依赖,所以我们只需要引入一个依赖即可。
Slf4j的初步使用
- 在正是使用Slf4j记录日志之前,我们还需要了解一下Log4j的日志配置文件。
log4j.properties
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
| # log4j的日志记录属性 # DEBUG, INOF,ERROR 第一个参数为日志记录级别 # Console, File, DailyRollingFile, RollingFile 第二个参数为日志记录的方式 log4j.rootLogger=debug, File
#Console 控制台打印日志,该方式会将日志打印在控制台中 log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
#File 文件记录方式,该方式会将日志记录在log4j.appender.File.File路径的文件中 log4j.appender.File = org.apache.log4j.FileAppender log4j.appender.File.File = log/err.log log4j.appender.File.layout = org.apache.log4j.PatternLayout log4j.appender.File.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
#DailyRollingFile 每天产生一个新的日志记录文件 log4j.appender.DailyRollingFile = org.apache.log4j.DailyRollingFileAppender log4j.appender.DailyRollingFile.File = log/err.log log4j.appender.DailyRollingFile.layout = org.apache.log4j.PatternLayout log4j.appender.DailyRollingFile.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
#RollingFile 文件达到指定大小的时候产生新的日志文件 log4j.appender.RollingFile = org.apache.log4j.RollingFileAppender log4j.appender.RollingFile.File = log/err.log log4j.appender.RollingFile.MaxFileSize=1KB log4j.appender.RollingFile.MaxBackupIndex=3 log4j.appender.RollingFile.layout = org.apache.log4j.PatternLayout log4j.appender.RollingFile.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
|
LogTest
1 2 3 4 5 6 7 8 9 10 11 12 13
| public class LogTest {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Test public void delete() { logger.info("记录信息日志"); logger.warn("记录警告日志"); logger.error("记录错误日志"); } }
|
我们运行该代码,发现日志文件已经被记录到指定的log/err.log
文件中。
Lombox和Slf4j
在每次记录日志的时候,我们都需要在每个类中使用LoggerFactory
来创建一个日志记录对象,而在Lombox中,为我们提供了一个更为简便的方式来创建Logger对象记录日志。
@Slf4j
我们只需要在类上使用@Slf4j
注解,那么Lombox就会自动为该类注入一个属性名为log
的日志记录对象,我们就可以使用该对象来进行日志记录。
- 首先,我们需要引入Lombox和Slf4j的依赖。
1 2 3 4 5 6 7 8 9 10
| <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.22</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> </dependency>
|
Lombox除了需要引入相关依赖外,还需要安装Lombox插件才能够使用,其中IDEA自动集成了Lombox,我们可以直接通过IDEA的插件功能下载安装Lombox。
1 2 3 4 5 6 7 8 9 10
| @Slf4j public class LogTest {
@Test public void delete() { log.info("记录信息日志"); log.warn("记录警告日志"); log.error("记录错误日志"); } }
|
注意:Lombox自动注入的log对象和我们自己使用LoggerFactory获取的logger对象都是Logger类的对象,只是对象名称不同而已。