目录
- 日志
- 使用日志
- 日志级别
- 设置日志级别
- 设置分组
- 指定日志文件路径
- 日志切割归档
- 使用第三方日志框架
- log4j2配置文件【分级存储】
- logback配置文件【分级存储】
- 实例代码
日志
使用日志
给controller添加日志信息
要给controller类上添加@Slf4j
注解,然后使用log.info(),log.debug(),log.error()
等输出日志信息
代码:
@RestController
@Slf4j
public class HaController {
//一个类可以有一个日志记录器,他可以被@Slf4j代替
//Logger logger = LoggerFactory.getLogger(getClass());
@GetMapping("/haha")
public String haha(){
//打印日志信息
log.info("/haha请求进来了");
//logger.info("/haha请求进来了");
return "哈哈哈";
}
}
日志级别
只会打印指定级别以上级别的日志信息
-
由低到高:
ALL,TRACE, DEBUG, INFO, WARN, ERROR,FATAL,OFF
-
ALL:打印所有日志
-
TRACE:追踪框架详细流程日志,一般不使用
-
DEBUG:开发调试细节日志
-
INFO:关键、感兴趣信息日志
-
WARN:警告但不是错误的信息日志,比如:版本过时
-
ERROR:业务错误日志,比如出现各种异常
-
FATAL:致命错误日志,比如jvm系统崩溃
-
OFF:关闭所有日志记录
设置日志级别
在properties或者yaml文件中设置日志级别
实例代码
精确到某一个包下
# 将精确到“com.hyp.uselogging.controller”下的包的日志级别设置为debug
logging.level.com.hyp.uselogging.controller=debug
# 将没有精确包的日志级别设置root
logging.level.root=info
为精确某一个包,在根包下
# 如果想修改多个包的日志级别,将他们都修改为info级别
# 一个一个修改太麻烦,springBoot提供了分组功能
logging.level.com.hyp.uselogging.controller.service=debug
logging.level.com.hyp.uselogging.controller.mapping=info
设置分组
可能会遇到给不同包设置级别,一个一个设置太麻烦,所以进行分组
# 如果想修改多个包的日志级别,将他们都修改为info级别
# 一个一个修改太麻烦,springBoot提供了分组功能
logging.level.com.hyp.uselogging.controller.service=debug
logging.level.com.hyp.uselogging.controller.mapping=info
# 分组,起名为a组,包含的包在=后面
logging.group.a=com.hyp.uselogging.controller,com.hyp.uselogging.mapping
# 设置级别,给A组包中的日志级别全设置为info
logging.level.a=info
# 注意 springBoot给我们提供了两个预设组,sql和web
指定日志文件路径
将日志文件保存到指定目录中
# 指定日志文件路径
# 如果只指定路径,日志文件名就会使用默认名称 spring.log
logging.file.path=D:\\
# 使用logging.file.name
logging.file.name=D:\\demo.log
# 如果只规定文件名
# 会自动将这个文件存放在项目的根路径下
logging.file.name=demo.log
日志切割归档
- 归档: 将每天的日志文件放在一个文件中
- 切割: 将大小大于某个值的文件分割成多个文件 默认大小是10M
# 日志切割归档
# 日志归档,默认格式为 :日志文件名.年.月.日.第几个文件.gz
logging.logback.rollingpolicy.file-name-pattern
# 日志切割,默认为10M 一旦一个日志文件超过了10M,就要进行切割,将他们分成多个文件存放
# 使用的是归档的格式区分
logging.logback.rollingpolicy.max-file-size=10M
使用第三方日志框架
这里使用的是log4j2
首先先要将sprinBootd的默认日志框架关闭,将log4j2框架导入
<!--移除springboot的默认日志框架-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--添加log4j2日志框架-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
log4j2配置文件【分级存储】
配置log4j2的配置信息
实现了日志的分割和归档并且按照日志级别将不同级别的日志放在不容的文件中
<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<configuration status="WARN" monitorInterval="30">
<!--先定义所有的appender-->
<appenders>
<!--这个输出控制台的配置-->
<console name="Console" target="SYSTEM_OUT">
<!--输出日志的格式-->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</console>
<!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->
<File name="log" fileName="log/test.log" append="false">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</File>
<!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingFile name="RollingFileInfo" fileName="${sys:user.home}/logs/info.log"
filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
<!--这个存放warn信息-->
<RollingFile name="RollingFileWarn" fileName="${sys:user.home}/logs/warn.log"
filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
<DefaultRolloverStrategy max="20"/>
</RollingFile>
<!--存放error信息-->
<RollingFile name="RollingFileError" fileName="${sys:user.home}/logs/error.log"
filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
</appenders>
<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
<loggers>
<!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
<logger name="org.springframework" level="INFO"></logger>
<logger name="org.mybatis" level="INFO"></logger>
<root level="all">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFileInfo"/>
<appender-ref ref="RollingFileWarn"/>
<appender-ref ref="RollingFileError"/>
</root>
</loggers>
</configuration>
logback配置文件【分级存储】
<configuration>
<!-- 控制台输出日志 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%highlight(%date{yyyy-MM-dd HH:mm:ss.SSS})] [%highlight(%level)] [%logger{50}] %msg%n</pattern>
</encoder>
</appender>
<!-- Info级别日志 -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>D:/星球项目/UserCenter/UserCenterLog/userCenter_info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>D:/Log/info.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>[%date{ISO8601}] [%level] [%logger{50}] %msg%n</pattern>
</encoder>
</appender>
<!-- Warn级别日志 -->
<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>D:/星球项目/UserCenter/UserCenterLog/userCenter_warn.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>D:/Log/warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>[%date{ISO8601}] [%level] [%logger{50}] %msg%n</pattern>
</encoder>
</appender>
<!-- Error级别日志 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>D:/星球项目/UserCenter/UserCenterLog/userCenter_error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>D:/Log/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>1Kb</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>[%date{ISO8601}] [%level] [%logger{50}] %msg%n</pattern>
</encoder>
</appender>
<!-- 根日志器 -->
<root level="INFO">
<appender-ref ref="CONSOLE" />
<!-- 设置不同级别的日志输出器 -->
<appender-ref ref="INFO_FILE" level="INFO" />
<appender-ref ref="WARN_FILE" level="WARN" />
<appender-ref ref="ERROR_FILE" level="ERROR" />
</root>
</configuration>
实例代码
配合上面的xml配置文件就会将输出的日志文件存放在指定的目录中
@RestController
@Slf4j
public class HaController {
//一个类可以有一个日志记录器,他可以被@Slf4j代替
//Logger logger = LoggerFactory.getLogger(getClass());
@GetMapping("/haha")
public String haha(){
//打印日志信息
log.info("/haha请求进来了");
log.error("错误信息");
//logger.info("/haha请求进来了");
return "哈哈哈";
}
}