• Spring Boot (16) logback和access日志


    Spring Boot 内部采用的是Commons Logging进行日志记录,但是在底层为Java Util Logging、Log4J2、Logback等日志框架提供了默认配置。

    logback

      虽然spring boot有很多可用的日志框架,一般来说,使用spring boot 默认的logback就可以了。

    日志格式-默认输出格式

    2018-06-08 12:24:28.001  INFO 2825 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
    2018-06-08 12:24:28.053  INFO 2825 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8088 (http) with context path '/dev'
    2018-06-08 12:24:28.141  INFO 2825 --- [           main] com.spring.boot.BootApplication          : Started BootApplication in 2.956 seconds (JVM running for 3.433)
    2018-06-08 12:24:40.560  INFO 2825 --- [nio-8088-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/dev]    : Initializing Spring FrameworkServlet 'dispatcherServlet'
    2018-06-08 12:24:40.560  INFO 2825 --- [nio-8088-exec-2] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
    2018-06-08 12:24:40.992  INFO 2825 --- [nio-8088-exec-2] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 432 ms

    输出如下元素:

    Logback是没有FATAL级别的日志,它将被映射到ERROR

      时间日期:精确到毫秒,可以用于排序

      日志级别:ERROR、WARN、INFO、DEBUG、TRACE

      进程ID

      分隔符:采用 --- 来标识日志部分

      Logger名:通常使用源代码的类名

      日志内容:输出的消息

    日志输出

      spring boot 默认为我们输出的日志级别为INFO、WARN、ERROR,如果需要输出更多日志,可以通过以下方式开启:

        命令模式配置:java -jar xxx.jar --debug=true 这种命令会被spring boot解析,优先级最高

        资源文件配置:application.properties中配置debug=true即可,该配置只对 嵌入式容器、spring、hibernate生效,我们自己的项目想要输出DEBUG需要额外配置

        配置规则:logging.level.<logger-name>=<level>

    日志输出级别配置

    logging:
      level:
        root: WARN
        org:
          springframework.web: debug
          hibernate: error
          #比如mybatis sql日志
          mybatis: INFO
        mapper: debug

    日志输出格式配置

      logging.pattern.console:定义输出到控制台的格式

      logging.pattern.file:定义输出到文件的格式

    颜色编码

      如果中断支持ANSI,默认情况下会给日志上个色,提高可读性,可以再配置文件中设置spring.output.ansi.enable来改变默认值

      ALWAYS:启用ANSI颜色的输出

      DETECT:尝试检测ANSI着色功能是否可用

      NEVER:禁用ANSI颜色的输出

    spring:
      output:
        ansi:
          enabled: always

      WARN:Yellow

      FATAL、ERROR:Red

      Info、DEBUG、TRACE:Green

    文件保存

      默认情况下,spring boot只是将日志输出到控制台,不会写入到日志文件中去。如果除了控制台输出之外还想写日志文件,则需要在application.properties中设置Logging.file或logging.path属性。

      logging.file:将日志写入到指定的文件中,默认为相对路径,可以设置成绝对路径。

      logging.path:将名为spring.log写入到指定的文件夹中。

    日志文件在达到10MB时进行切割,产生一个新的日志文件(如:spring1.log、spring2.log),新的日志依旧输出到spring.log中去,默认情况下会记录ERROR、WARN、INfo级别消息。

      logging.file.max-size:限制日志文件大小

      logging.file.max-history:限制日志保留天数

    logging:
      level:
        root: warn
      file:
        max-size: 100MB
        max-history: 100

    自定义日志配置

      由于日志在applicationContext之前就初始化好了,所以spring boot为我们提供了logging.config属性,方面我们配置自定义日志文件,默认情况他会根据日志的依赖自动加载。

    在resources目录下配置logback.xml | logback.groovy | logback-spring.xml | logback-spring.groovy 都可以被加载

    logback-spring.xml

    在控制台输出info级别日志,另外将warn警告日志和error错误日志分别保存到不同的目录文件

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <!-- appender是配置输出终端,ConsoleAppender是控制台,name是自定义名 -->
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <!-- 配置日志格式,这是一个比较通用的格式 -->
                <pattern>%d{HH:mm:ss.SSS} %-5level %logger{35} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <!-- 输出终端是滚动文件 -->
        <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 基于时间滚动,就是每天的日志输出到不同的文件 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 输出日志的目录文件名,window中默认分区为当前程序的硬盘分区,%d{yyyy-MM-dd}是当前日期 -->
                <fileNamePattern>log/warn/warn.%d{yyyy-MM-dd}.log</fileNamePattern>
                <!-- 最大保存99个文件,超出的历史文件会被删除 -->
                <maxHistory>99</maxHistory>
            </rollingPolicy>
            <!-- 按照日志级别进行过滤 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <!-- 只收集WARN级别的日志,其他高级别和低级别的日志都放弃 -->
                <level>WARN</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <encoder>
                <pattern>%d{HH:mm:ss.SSS} %-5level %logger{35} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <!-- 除了filter,其他 配置和上面一样, 只是name和文件路径不同-->
        <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>log/error/error.%d{yyyy-MM-dd}.log</fileNamePattern>
                <maxHistory>99</maxHistory>
            </rollingPolicy>
            <!-- 阈值过滤器 -->
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <!-- 收集ERROR及ERROR以上级别的日志 -->
                <level>ERROR</level>
            </filter>
            <encoder>
                <pattern>%d{HH:mm:ss.SSS} %-5level %logger{35} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <!-- root是根日志打印器,只有一个,负责整个系统的日志输出  -->
        <root level="INFO">
            <!-- 将上面三个输出终端配置到根打印器,将对整个系统 生效。 -->
            <appender-ref ref="STDOUT" />
            <appender-ref ref="WARN" />
            <appender-ref ref="ERROR" />
        </root>
    
        <!-- logger是root的子打印器,可以有多个,输出name配置的包中的日志。 -->
        <!-- mybatis映射dao的包名,设置为debug可以打印mybatis的sql语句 -->
        <logger name="com.david.dao" level="DEBUG" />
    </configuration>

    运行结果:

    level日志级别

      在上面的配置中leven参数,主要使用了四种。级别从低到高分别为debug、info、warn、error。当设置某一级别日志时,比他低级的日志不会输出。

    debug:调试,从改名可以看出其作用。程序中报错无法解决时,使用调试来查看更多错误信息。在mybatis中使用这种日志才会输出sql语句。debug的输出量太大,而且不懂源码的人很多都看不懂,还有很多没什么实际作用的日志信息刷屏,只适合报异常程序的调试。

    info:信息,信息量比debug少很多,只会输出一些重要的信息,适合开发时使用。

    warn:警告,通常是可以修复的,不修复也不一定会引发异常,有时候是一些提示信息,但是比info信息更加重要

    error:错误,很明显,就是程序异常

    logback扩展配置

      扩展配置仅适用于logback-spring.xml来设置logging.config属性的文件,因为logback.xml加载过早,无法获取spring boot一些扩展属性。

        使用扩展属性springProfile与springProperty让你的logback-spring.xml配置显得更牛逼。取代logback-{profile}.xml设置多环境配置。

        <springProfile name="dev">
            <!--开发激活 级别debug 并且不写日志文件-->
            <root level="DEBUG">
                <appender-ref ref="STDOUT"/>
            </root>
        </springProfile>
        <springProfile name="test">
            <!--测试激活 级别为info,记录日志文件-->
            <root level="INFO">
                <appender-ref ref="FILE"/>
                <appender-ref ref="STDOUT"/>
            </root>
        </springProfile>
        <springProfile name="!prod">
            <!--生产环境不激活 -->
        </springProfile>

    access访问日志

      tomcat中默认是由access访问日志的,用于记录访问者的ip,不过在spring boot中这个日志默认是关闭的。如果你的服务器结构中有nginx类的http服务器,access日志应该是在nginx中配置的。而tomcat这样的后台服务器只需要记录后台日志,不需要管access日志。如果想在spring boot中打开access日志,可以在application.yml中配置

    server:
      tomcat:
        #配置tomcat工作目录
        basedir: tomcat
        accesslog:
          enabled: true
  • 相关阅读:
    Codeforces Round #246 (Div. 2):B. Football Kit
    iOS8使用TouchID
    HDU 1796 How many integers can you find(容斥原理+二进制/DFS)
    MapReduce的Reduce side Join
    Android入门级编译错误汇总
    当往事已随风
    静态链表的C++实现
    《跨界杂谈》企业商业模式(三):集约
    C
    Android插屏动画效果
  • 原文地址:https://www.cnblogs.com/baidawei/p/9111635.html
Copyright © 2020-2023  润新知