前言
项⽬中⽇志系统是必不可少的,⽬前⽐较流⾏的⽇志框架有log4j、logback等,可能⼤家还不知道,这两个框架的作者是同⼀个
⼈,Logback旨在作为流⾏的log4j项⽬的后续版本,从⽽恢复log4j离开的位置。另外 slf4j(Simple Logging Facade for Java) 则是⼀
个⽇志门⾯框架,提供了⽇志系统中常⽤的接⼝,logback 和 log4j 则对slf4j 进⾏了实现。我们本⽂将讲述如何在spring boot 中应⽤
logback+slf4j实现⽇志的记录。
为什么使⽤logback
- 1. 是log4j 框架的作者开发的新⼀代⽇志框架,它效率更⾼、能够适应诸多的运⾏环境,同时天然⽀持SLF4J
- 2. Logback的定制性更
开始使⽤
⼀:添加依赖:maven依赖中添加spring-boot-starter-logging
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency>
但是呢,实际开发中我们不需要直接添加该依赖,你会发现spring-boot-starter其中包含了 spring-boot-starter-logging,该依赖内容就
是 Spring Boot 默认的⽇志框架 Logback+SLF4J。⽽ spring-boot-starter-web 包含了spring-boot-starte,所以我们只需要引⼊web
组件即可:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
二:在resource下新建log文件夹,并且在其中创建logback.xml
logback.xml内容如下:
<configuration> <!--本文主要输出日志为控制台日志,系统日志,sql日志,异常日志--> <!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,,,, --> <!--控制台--> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d %p (%file:%line\)- %m%n</pattern> <charset>UTF-8</charset> </encoder> </appender> <!--系统info级别日志--> <!--<File> 日志目录,没有会自动创建--> <!--<rollingPolicy>日志策略,每天简历一个日志文件,或者当天日志文件超过64MB时--> <!--encoder 日志编码及输出格式--> <appender name="fileLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <File>log/file/fileLog.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>log/file/fileLog.log.%d.%i</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <!-- or whenever the file size reaches 64 MB --> <maxFileSize>64 MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <encoder> <pattern> %d %p (%file:%line\)- %m%n </pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> </appender> <!--sql日志--> <appender name="sqlFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <File>log/sql/sqlFile.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>log/sql/sqlFile.log.%d.%i</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <!-- or whenever the file size reaches 64 MB --> <maxFileSize>64 MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <!--对记录事件进行格式化。负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流。--> <encoder> <!--用来设置日志的输入格式--> <pattern> %d %p (%file:%line\)- %m%n </pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> </appender> <!--异常日志--> <appender name="errorFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <File>log/error/errorFile.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>log/error/errorFile.%d.log.%i</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <!-- or whenever the file size reaches 64 MB --> <maxFileSize>64 MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <!--对记录事件进行格式化。负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流。--> <encoder> <!--用来设置日志的输入格式--> <pattern> %d %p (%file:%line\)- %m%n </pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 日志都在这里 过滤出 error 使用 try {}catch (Exception e){} 的话异常无法写入日志,可以在catch里用logger.error()方法手动写入日志 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 日志输出级别 --> <!--All\DEBUG\INFO\WARN\ERROR\FATAL\OFF--> <!--打印info级别日志,分别在控制台,fileLog,errorFile输出 异常日志在上面由过滤器过滤出ERROR日志打印 --> <root level="INFO"> <appender-ref ref="fileLog"/> <appender-ref ref="console"/> <appender-ref ref="errorFile"/> </root> <!--打印sql至sqlFile文件日志--> <logger name="com.springboot.demo.mapper" level="DEBUG" additivity="false"> <appender-ref ref="console"/> <appender-ref ref="sqlFile"/> </logger> </configuration>
三、在application.yml添加配置
# logback日志
logging:
# 设置logback.xml位置
config: classpath:log/logback.xml
配置完成,可以开始使用。
四、使用logback日志
在服务类上添加@Slf4j
在方法中就可以直接使用log日志对象
/** * 根据用户id查询用户信息 * @param query 查询类 */ @PostMapping("getUserById") public SysUser getUserById(SysUserQuery query){ SysUser sysUser = sysUserService.getSysUserById(query); log.info("getUserById: {}",sysUser); return sysUser ; }
启动项目查看日志日否打印:
日志文件在项目下一级目录:
至此springbooot成功配置logback并使用了。