SpringBoot整合Logback实现日志管理
了解日志
什么是日志
程序运行过程中所产生的信息就是日志
当我们启动SpringBoot时,控制台打印的信息就是日志
日志的作用
1、发现和定位问题
2、记录用户的登录信息,进行大数据分析
3、记录系统的操作信息,方便数据的恢复和定位操作者
4、记录程序的执行时间,方便以后优化程序
日志插件
Grep Console是IntelliJ IDEA的一款好用的日志插件。最有用的作用是可以给不同的日志内容设置颜色,也可以通过过滤条件过滤日志,让你在开发过程中对日志信息更直观。
自定义打印日志
相关设计模板
日志的抽象层: SLF4j
日志的实现
- log4j
- log4j2
- logback
- jul(java.util.logging)
SpringBoot内置了日志框架slf4j+logback,采用了“门面模式”
1、日志门面:slf4j
2、日志实现:logback
关于常见的日志框架:
1、日志框架包括日志门面、日志实现
2、日志门面就相当于是装修公司,日志实现相当于是工程队(实现具体的操作),日志门面仅能对应一个日志实现
获得日志对象
方式一
private Logger log = LoggerFactory.getLogger(类名.class);
方式二
@SLF4j
日志级别
- trace:级别最低
- debug:需要调试时候的关键信息
- info:普通的打印信息
- warn:警告信息
- error:错误信息
- fatal:灾难级的,因为代码异常导致程序退出执行的事件;系统级别,程序猿无法打印
日志使用
@RestController
public class LoggerController {
// 得到日志对象
private Logger logger = LoggerFactory.getLogger(LoggerController.class);
// 打印日志
@RequestMapping("/logger")
public String logger(){
l
return "logger";
}
}
启动SpringBoot,浏览器输入localhost:8080/logger
由于SpringBoot默认日志级别是 info,因此只能打印 info 及更高级别的日志
格式说明
Spring Boot - yaml配置
配置级别
application.yml
logging:
level:
root: warn # 设置所有目录的日志级别
net:
wanho:
controller: trace # 设置net.wanho.controller目录的日志级别
service: info # 设置net.wanho.service的日志级别
配置持久化
application.yml
logging:
file:
path: D: # 设置日志文件的目录,默认名称 spring.log
指定名称
logging:
file:
name: D:log_all.log # 设置日志文件的目录,默认名称 spring.log
Spring Boot - xml配置
配置文件位置在哪里
- 在文档26.6 Custom Log Configuration描述位置
Logging System | Customization |
---|---|
Logback | logback-spring.xml , logback-spring.groovy , logback.xml , or logback.groovy |
Log4j2 | log4j2-spring.xml or log4j2.xml |
JDK (Java Util Logging) | logging.properties |
logback.xml
logback-spring.xml (文档里说此种配置方法更高级,可以设置profile)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoder 默认配置为PatternLayoutEncoder -->
<encoder>
<springProfile name="dev">
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</springProfile>
<springProfile name="prod">
<pattern>=========%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</springProfile>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<!--使用变量-->
<file>${log.path}/cloud-idp.log</file>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
完整版本
<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true" scanPeriod="10 seconds">
<property name="LOG_HOME" value="./logs" />
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- 日志输出格式 -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 DEBUG -->
<appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/debug/manage-remote-debug.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>16</MaxHistory>
<!--日志文件切割大小-->
<maxFileSize>20MB</maxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<OnMatch>ACCEPT</OnMatch>
<OnMismatch>DENY</OnMismatch>
</filter>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/info/manage-remote-info.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>16</MaxHistory>
<!--日志文件切割大小-->
<maxFileSize>20MB</maxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<OnMatch>ACCEPT</OnMatch>
<OnMismatch>DENY</OnMismatch>
</filter>
</appender>
<appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/warn/manage-remote-warn.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>24</MaxHistory>
<!--日志文件切割大小-->
<maxFileSize>20MB</maxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<OnMatch>ACCEPT</OnMatch>
<OnMismatch>DENY</OnMismatch>
</filter>
</appender>
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/error/manage-remote-error.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>32</MaxHistory>
<!--日志文件切割大小-->
<maxFileSize>20MB</maxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<OnMatch>ACCEPT</OnMatch>
<OnMismatch>DENY</OnMismatch>
</filter>
</appender>
<logger name="net.wanho.controller" level="DEBUG"/>
<!-- 设置root -->
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="DEBUG" />
<appender-ref ref="INFO" />
<appender-ref ref="WARN" />
<appender-ref ref="ERROR" />
</root>
</configuration>
「点点赞赏,手留余香」
还没有人赞赏,快来当第一个赞赏的人吧!
给Admin打赏
×
予人玫瑰,手有余香
- 2¥
- 5¥
- 10¥
- 20¥
- 50¥
¥2
声明:本文为原创文章,版权归信息岛所有,欢迎分享本文,转载请保留出处!