目录
logback
使用logback
获取日志对象
日志级别
控制日志输出级别
日志输出格式控制
配置方式
日志转存
示例
日志是应用程序不可或缺的一部分,记录着程序运行的信息。主要作用有:
- 记录日常运营的重要信息
- 记录应用报错信息
- 记录过程数据等
logback
Logback 作为 Spring Boot 的默认日志实现框架,异步吞吐量相比于Log4j更加强大:
组件 | 说明 |
---|---|
Logger | 日志记录器,存放日志对象,负责日志分类和级别控制 |
Appender | 指定日志输出目的地 |
Layout | 日志格式转换成字符串,输出格式化的日志信息 |
使用logback
在SpringBoot项目中,导入了spring-boot-starter起步依赖,则默认导入了logback所需的依赖,同样导入spring-boot-starter-web也是如此:
获取日志对象
方法一:
private static final Logger log = LoggerFactory.getLogger(LogbackApplication.class);
log.warn("sdadas"); log.info("info..."); log.error("jksabnfijASBF"); log.debug("daskdhaoisjdhja");
注意:使用Logger时导入的包是org.slf4j下的,而不是java.util。
方法二:使用@Slf4j注解:
注:该方法在启用前要先启用lombok(SpringBoot内置了lombok)
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>
该方法省去了创建对象的麻烦,只需要加上@Slf4j注解,就会自动生成log变量。
日志级别
SpringBoot的日志级别用于控制日志输出的详细程度,日志级别越高,输出的日志越详细。
级别 | 说明 |
---|---|
TRACE | 运行堆栈信息,使用率低 |
DEBUG | 调试时打印关键信息 |
INFO | 普通的打印信息,记录运维过程数据 |
WARN | 警告数据,不影响使用 |
ERROR | 记录错误日志信息 |
FATAL | 致命错误,代码异常导致程序退出的错误 |
控制日志输出级别
可以在springboot的配置文件中设置日志的输出级别:
logging:level:root: error
日志输出格式控制
对于单条日志信息来说,日期,触发位置,记录信息是最核心的信息。级别用于做筛选过滤,PID与线程名用于做精准分析。
配置方式
logging:pattern:console: "%logger{36} - %msg%n" #控制台输出格式file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n" #文件输出格式
占位符 | 说明 | 示例输出 |
---|---|---|
%d{yyyy-MM-dd HH:mm:ss} | 日期时间,按照指定的格式输出。yyyy-MM-dd HH:mm:ss 表示年-月-日 时:分:秒。 | 2023-10-05 14:30:45 |
[%thread] | 输出日志的线程名称,放在方括号中。 | [main] |
%-5level | 日志级别,固定宽度为 5 个字符,左对齐。常见的级别有 INFO 、DEBUG 、ERROR 等。 | INFO (注意后面有一个空格) |
%logger{36} | 日志记录器的名称,最多显示 36 个字符。如果名称超过 36 个字符,会进行截断。 | com.example.MyClass |
- | 一个分隔符,用于分隔日志记录器名称和日志消息。 | - |
%msg | 日志消息内容,即开发者在代码中记录的日志信息。 | This is a log message. |
%n | 换行符,表示日志记录结束并换行。 | (在文件中表现为换行) |
示例:"%d{yyyy-MM-dd HH:mm:ss} %logger{36} - %msg%n"
日志转存
日志不仅能在控制台上显示,还可以存在文件中,方便后续的查阅。
配置方式:设置日志文件名即可
logging:
file:path: ./logs/ #路径
示例
logging:file:path: ./logs/
注意:不需要手动创建该路径,Springboot程序启动后会自动创建。如果不指定文件名,会自动默认创建在spring.log文件中。如果不修改路径,日志会追加在spring.log文件中。
对于线上复杂的情况,可以对日志文件进行配置:
首先创建一个logback的配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,比如: 如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="10 seconds" debug="false"><!-- 日志路径 部署在服务器 文件夹需要设计777权限 --><property name="log.base" value="C://logs/suke"/><!--日志存储天数--><property name="log.max.days" value="30"/><!-- 日志文件大小 --><property name="log.max.size" value="500MB"/><!-- 输出格式--><property name="log.pattern" value="%date{ISO8601} %level [%thread] %logger{56} : %msg%n"/><!--字符集--><property name="log.charset" value="UTF-8"/><!--控制台-附加器 --><appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"><!--格式 --><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${log.pattern}</pattern><charset>${log.charset}</charset></encoder></appender><!--info-附加器--><appender name="infoFile" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.base}/info/_info.log</file><!--存储路径--><!-- 输出格式 --><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${log.pattern}</pattern><charset>${log.charset}</charset></encoder><!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。--><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!--按天回滚--><fileNamePattern>${log.base}/info/archive/info_%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern><!--日志最大存储天数--><maxHistory>${log.max.days}</maxHistory><!--当天的日志 超过大小 压缩日志并保存 --><maxFileSize>${log.max.size}</maxFileSize></rollingPolicy><!--过滤器,只记录INFO级别的日志--><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>INFO</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!--warn-附加器--><appender name="warnFile" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.base}/warn/_warn.log</file><!--存储路径--><!--输出格式--><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${log.pattern}</pattern><charset>${log.charset}</charset></encoder><!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。--><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${log.base}/warn/archive/warn_%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern><!--日志最大存储天数--><maxHistory>${log.max.days}</maxHistory><!-- 当天的日志 超过大小 压缩日志并保存 --><maxFileSize>${log.max.size}</maxFileSize></rollingPolicy><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>WARN</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!--error-附加器--><appender name="errorFile" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.base}/error/_error.log</file><!--存储路径 --><!--输出格式--><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${log.pattern}</pattern><charset>${log.charset}</charset></encoder><!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。--><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${log.base}/error/archive/error_%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern><!--日志最大存储天数--><maxHistory>${log.max.days}</maxHistory><!-- 当天的日志 超过大小 压缩日志并保存 --><maxFileSize>${log.max.size}</maxFileSize></rollingPolicy><!--级别-过滤器 error--><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- 为某个包下的所有类的指定Appender 这里也可以指定类名称例如:com.aa.bb.ClassName --><!--<logger name="org.springframework.aop.framework.CglibAopProxy" additivity="false"><level value="info" /><appender-ref ref="stdout" /></logger>--><logger name="com.fs" additivity="false"><level value="debug" /><appender-ref ref="stdout" /></logger><!-- root将级别为“DEBUG”及大于“DEBUG”的日志信息交给已经配置好的名为“Console”的appender处理,“Console”appender将信息打印到Console --><root level="info"><appender-ref ref="stdout" /> <!-- 标识这个appender将会添加到这个logger --><appender-ref ref="infoFile" /><appender-ref ref="warnFile" /><appender-ref ref="errorFile" /></root>
</configuration>
注:Springboot会默认加载classpath:logback-spring.xml或者classpath:logback-spring.groovy或者:classpath:logback.xml,可自定义配置:
logging: config: classpath:logback-suke.xml
不要使用logback-logback.xml这个来命名,否则spring boot将不能完全实例化