SpringBoot—日志

目录

  • 日志
    • 使用日志
    • 日志级别
      • 设置日志级别
      • 设置分组
      • 指定日志文件路径
      • 日志切割归档
      • 使用第三方日志框架
        • 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框架导入


        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starterartifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-starter-loggingartifactId>
                exclusion>
            exclusions>
        dependency>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-log4j2artifactId>
        dependency>

log4j2配置文件【分级存储】

配置log4j2的配置信息

实现了日志的分割和归档并且按照日志级别将不同级别的日志放在不容的文件中





<configuration status="WARN" monitorInterval="30">
    
    <appenders>
        
        <console name="Console" target="SYSTEM_OUT">
            
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
        console>
        
        <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>
        
        <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">
            
            <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>
        
        <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 max="20"/>
        RollingFile>
        
        <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>
    
    <loggers>
        
        <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%npattern>
        encoder>
    appender>

    
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>D:/星球项目/UserCenter/UserCenterLog/userCenter_info.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>D:/Log/info.%d{yyyy-MM-dd}.%i.logfileNamePattern>
            <maxHistory>30maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
        rollingPolicy>
        <encoder>
            <pattern>[%date{ISO8601}] [%level] [%logger{50}] %msg%npattern>
        encoder>
    appender>

    
    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>D:/星球项目/UserCenter/UserCenterLog/userCenter_warn.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>D:/Log/warn.%d{yyyy-MM-dd}.%i.logfileNamePattern>
            <maxHistory>30maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
        rollingPolicy>
        <encoder>
            <pattern>[%date{ISO8601}] [%level] [%logger{50}] %msg%npattern>
        encoder>
    appender>

    
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>D:/星球项目/UserCenter/UserCenterLog/userCenter_error.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>D:/Log/error.%d{yyyy-MM-dd}.%i.logfileNamePattern>
            <maxHistory>30maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>1KbmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
        rollingPolicy>
        <encoder>
            <pattern>[%date{ISO8601}] [%level] [%logger{50}] %msg%npattern>
        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 "哈哈哈";
    }
}

SpringBoot—日志_第1张图片

你可能感兴趣的:(SpringBoot,spring,boot,后端,java)