zoukankan      html  css  js  c++  java
  • Spring Boot 的Logback

    Spring Boot 默认使用Logback记录日志

    Spring Boot starter 都会默认引入spring-boot-starter-logging,不需要再引入

    日志级别从高到低:TRACE < DEBUG < INFO < WARN < ERROR < FATAL

    如果设置为 WARN ,则低于 WARN 的信息都不会输出。

    Spring Boot中默认配置ERRORWARNINFO级别的日志输出到控制台。

    2019-08-20 10:42:03.680 INFO 13728 --- [ main] com.example.demo.DemoApplication : Starting DemoApplication on hkgi-PC with PID 13728 (E:javademo argetclasses started by Administrator in E:javademo)
    2019-08-20 10:42:03.683 INFO 13728 --- [ main] com.example.demo.DemoApplication : No active profile set, falling back to default profiles: default
    2019-08-20 10:42:04.279 INFO 13728 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
    2019-08-20 10:42:04.336 INFO 13728 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 51ms. Found 1 repository interfaces.
    2019-08-20 10:42:04.617 INFO 13728 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$58c4426d] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
    2019-08-20 10:42:04.899 INFO 13728 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)

    A.日期和时间--精确到毫秒,并按照时间进行简单的排序

    B.日志级别--ERROR,WARN,INFO,DEBUG,TRACE

    C.进程ID号

    D.日志内容,用"---"分隔符分开

    E.线程名字——括在方括号中
    F.日志的名字--通常对应的是类名

    说明:

      Logback没有FATAL级别,映射到ERROR

    配置

    (1)在application.properties中添加对应的配置

      指定包下日志输出的等级,root表示默认的级别

    logging.level.root= WARN
    logging.level.org.springframework.web= INFO
    logging.level.org.hibernate = ERROR
    logging.level.org.apache = INFO

      输出样式

    logging.level.root= WARN
    logging.level.org.springframework.web= INFO
    logging.level.org.hibernate = ERROR
    logging.level.org.apache = INFO
    logging.pattern.console= %d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n

     

      设置文本的颜色

    logging.level.root= WARN
    logging.level.org.springframework.web= INFO
    logging.level.org.hibernate = ERROR
    logging.level.org.apache = INFO
    #检测终端是否支持ANSI,是的话就采用彩色输出
    spring.output.ansi.enabled=detect
    logging.pattern.console= %clr(%d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n){blue}

      输出到文件

    logging.level.root= WARN
    logging.level.org.springframework.web= INFO
    logging.level.org.hibernate = ERROR
    logging.level.org.apache = INFO
    logging.pattern.console= %d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n
    logging.path = logs
    logging.pattern.file= %d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n
    ## 当文件超过1G时,归档压缩
    logging.file.max-size=1GB
    ## 日志文件最多保存3天
    logging.file.max-history=3

    (2)使用XML配置Logback

    还是有很多高级特性不太好配置,因此SpringBoot还是支持通过加载logback-spring.xml配置文件来定义日志相关的参数

    在src/main/resources下创建logback-spring.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration scan="true" scanPeriod="60 seconds" debug="false">
    
        <property name="log.path" value="logs" />
    
        <!--0. 日志格式和颜色渲染 -->
        <!-- 彩色日志依赖的渲染类 -->
        <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
        <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
        <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
        <!-- 彩色日志格式 -->
        <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    
        <!--1. 输出到控制台-->
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>info</level>
            </filter>
            <encoder>
                <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
                <!-- 设置字符集 -->
                <charset>UTF-8</charset>
            </encoder>
        </appender>
    
        <!--2. 输出到文档-->
        <!-- 2.1 level为 DEBUG 日志,时间滚动输出  -->
        <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 正在记录的日志文档的路径及文档名 -->
            <file>${log.path}/debug.log</file>
            <!--日志文档输出格式-->
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
                <charset>UTF-8</charset> <!-- 设置字符集 -->
            </encoder>
            <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 日志归档 -->
                <fileNamePattern>${log.path}/debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <!--日志文档保留天数-->
                <maxHistory>15</maxHistory>
            </rollingPolicy>
            <!-- 此日志文档只记录debug级别的 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>debug</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
    
        <!-- 2.2 level为 INFO 日志,时间滚动输出  -->
        <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 正在记录的日志文档的路径及文档名 -->
            <file>${log.path}/info.log</file>
            <!--日志文档输出格式-->
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
                <charset>UTF-8</charset>
            </encoder>
            <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 每天日志归档路径以及格式 -->
                <fileNamePattern>${log.path}/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <!--日志文档保留天数-->
                <maxHistory>15</maxHistory>
            </rollingPolicy>
            <!-- 此日志文档只记录info级别的 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>info</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
    
        <!-- 2.3 level为 WARN 日志,时间滚动输出  -->
        <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 正在记录的日志文档的路径及文档名 -->
            <file>${log.path}/warn.log</file>
            <!--日志文档输出格式-->
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
                <charset>UTF-8</charset> <!-- 此处设置字符集 -->
            </encoder>
            <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${log.path}/warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <!--日志文档保留天数-->
                <maxHistory>15</maxHistory>
            </rollingPolicy>
            <!-- 此日志文档只记录warn级别的 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>warn</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
    
        <!-- 2.4 level为 ERROR 日志,时间滚动输出  -->
        <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 正在记录的日志文档的路径及文档名 -->
            <file>${log.path}/error.log</file>
            <!--日志文档输出格式-->
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
                <charset>UTF-8</charset> <!-- 此处设置字符集 -->
            </encoder>
            <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${log.path}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <!--日志文档保留天数-->
                <maxHistory>15</maxHistory>
            </rollingPolicy>
            <!-- 此日志文档只记录ERROR级别的 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>ERROR</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
    
        <springProfile name="dev">
            <root level="info">
                <appender-ref ref="CONSOLE" />
                <appender-ref ref="DEBUG_FILE" />
                <appender-ref ref="INFO_FILE" />
                <appender-ref ref="WARN_FILE" />
                <appender-ref ref="ERROR_FILE" />
            </root>
        </springProfile>
    
        <springProfile name="prod">
            <root level="info">
                <appender-ref ref="DEBUG_FILE" />
                <appender-ref ref="INFO_FILE" />
                <appender-ref ref="WARN_FILE" />
                <appender-ref ref="ERROR_FILE" />
            </root>
        </springProfile>
        
    </configuration>

    说明:

      使用springProfile 分别配置了开发(dev),生产(prod)环境

      springProfile 如何指定?

      application.properties中添加配置项

    spring.profiles.active: dev

      表示默认加载的就是开发环境的配置

      创建不同环境下的配置文件(可以为不同的环境配置不同的数据库信息)

      开发环境 : application-dev.properties

      生产环境:application-prod.properties

      启动应用时Spring Boot通过applcation.properties文件中的spring.profiles.active配置项加载相关环境的配置信息
      还可以通过启动命令加参数  --spring.profiles.active=xxx来控制加载哪个环境的配置
      eg:java -jar test.jar --spring.profiles.active=dev 
  • 相关阅读:
    关于response.getWriter()写回数据的实际发生时间点
    警惕多iframe下的同名id引起的诡异问题
    spring注入静态成员变量提示invalid setter method
    plsql+绿色版oracle连接远程数据库配置及提示缺少msvcr71.dll解决方法
    <mvc:default-servlet-handler/>导致SimpleUrlHandlerMapping失效
    maven项目下jsp文件中el表达式失效问题
    Python爬虫框架Scrapy实例(三)数据存储到MongoDB
    Python爬虫实例(五) requests+flask构建自己的电影库
    MySQL与Python交互
    Python爬虫基础(四)Requests库的使用
  • 原文地址:https://www.cnblogs.com/baby123/p/11382052.html
Copyright © 2011-2022 走看看