• springboot集成logback日志


    简介

    spring boot内部使用Commons Logging来记录日志,但也保留外部接口可以让一些日志框架来进行实现,例如Java Util Logging,Log4J2还有Logback。

    如果你想用某一种日志框架来进行实现的话,就必须先配置,默认情况下,spring boot使用Logback作为日志实现的框架。

    配置控制台输出

    日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出。 
    Spring Boot中默认配置ERRORWARNINFO级别的日志输出到控制台。您还可以通过启动您的应用程序–debug标志来启用“调试”模式(开发的时候推荐开启)->

    - 在application-dev.yml中配置debug=true,该属性置为true的时候,核心Logger(包含嵌入式容器、hibernate、spring)会输出更多内容,但是你自己应用的日志并不会输出为DEBUG级别。

    日志记录到文件

    默认情况下,Spring Boot将日志输出到控制台,不会写到日志文件。如果要编写除控制台输出之外的日志文件,则需在application-dev.yml中设置logging.file或logging.path属性。 
    - logging.file,设置文件,可以是绝对路径,也可以是相对路径。如:logging.file=my.log 
    - logging.path,设置目录,会在该目录下创建spring.log文件,并写入日志内容,如:logging.path=/var/log

    如果只配置 logging.file,会在项目的当前路径下生成一个 xxx.log 日志文件。 如果只配置 logging.path,在 /var/log文件夹生成一个日志文件为 spring.log

     注:二者不能同时使用,如若同时使用,则只有logging.file生效 

    自定义日志配置

    由于日志服务一般都在ApplicationContext创建前就初始化了,它并不是必须通过Spring的配置文件控制。因此通过系统属性和传统的Spring Boot外部配置文件依然可以很好的支持日志控制和管理。

    在application-dev.yml通过logging.config属性指定自定义的名字:

    #配置日志
    logging:
      config : classpath:logback-boot.xml
    

     lz的具体配置如下

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    
        <!-- 文件输出格式 -->
        <property name="PATTERN" value="%yellow(%-12(%d{HH:mm:ss.SSS})) |-%highlight(%-5level) [%thread] %cyan(%c [%L]) -| %msg%n"/>
        <property name="project_name" value="springboot"></property>
    
        <!--文件存放目录-->
        <property name="log_root" value="/var/log/java/"></property>
        <property name="dev_log_path" value="${log_root}/${project_name}/"/>
        <property name="test_log_path" value="${log_root}/${project_name}/"/>
        <property name="prd_log_path" value="${log_root}/${project_name}/"/>
        <!--文件存放天数-->
        <property name="log_info_max" value="7"></property>
        <property name="debug_info_max" value="7"></property>
        <property name="error_info_max" value="7"></property>
    
        <!-- 开发 -->
        <springProfile name="dev">
            <logger name="com.chenpt" level="trace"/>
            <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
                <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                    <level>debug</level>
                </filter>
                <encoder>
                    <pattern>${PATTERN}</pattern>
                </encoder>
            </appender>
            <appender name="r-debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
                <filter class="ch.qos.logback.classic.filter.LevelFilter">
                    <level>INFO</level>
                    <onMatch>DENY</onMatch>
                    <onMismatch>NEUTRAL</onMismatch>
                </filter>
                <filter class="ch.qos.logback.classic.filter.LevelFilter">
                    <level>WARN</level>
                    <onMatch>DENY</onMatch>
                    <onMismatch>NEUTRAL</onMismatch>
                </filter>
                <filter class="ch.qos.logback.classic.filter.LevelFilter">
                    <level>ERROR</level>
                    <onMatch>DENY</onMatch>
                    <onMismatch>NEUTRAL</onMismatch>
                </filter>
                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                    <fileNamePattern>${dev_log_path}/%d{yyyyMMdd/HH}.debug</fileNamePattern>
                </rollingPolicy>
                <encoder>
                    <pattern>${PATTERN}</pattern>
                </encoder>
            </appender>
            <appender name="r-info" class="ch.qos.logback.core.rolling.RollingFileAppender">
                <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                    <level>INFO</level>
                </filter>
                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                    <fileNamePattern>${dev_log_path}/%d{yyyyMMdd/HH}.info</fileNamePattern>
                </rollingPolicy>
                <layout class="ch.qos.logback.classic.PatternLayout">
                    <pattern>${PATTERN}</pattern>
                </layout>
            </appender>
            <appender name="r-error" class="ch.qos.logback.core.FileAppender">
                <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                    <level>ERROR</level>
                </filter>
                <file>${log_root}/${project_name}.err.log</file>
                <layout class="ch.qos.logback.classic.PatternLayout">
                    <pattern>${PATTERN}</pattern>
                </layout>
            </appender>
            <root level="INFO">
                <appender-ref ref="stdout"/>
                <appender-ref ref="r-debug"/>
                <appender-ref ref="r-info"/>
                <appender-ref ref="r-error"/>
            </root>
        </springProfile>
    
        <!-- 测试 -->
        <springProfile name="test">
            <logger name="com.chenpt.modules" level="trace"/>
            <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
                <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                    <level>debug</level>
                </filter>
                <encoder>
                    <pattern>${PATTERN}</pattern>
                </encoder>
            </appender>
            <root level="INFO">
                <appender-ref ref="stdout"/>
            </root>
        </springProfile>
    
        <!-- 生产 -->
        <springProfile name="product">
            <appender name="r-debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
                <!-- Support multiple-JVM writing to the same log file -->
                <prudent>true</prudent>
                <file>${log_root}/${project_name}.log</file>
                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                    <fileNamePattern>${prd_log_path}/%d{yyyyMMdd/HH}.debug</fileNamePattern>
                </rollingPolicy>
    
                <filter class="ch.qos.logback.classic.filter.LevelFilter">
                    <level>INFO</level>
                    <onMatch>DENY</onMatch>
                    <onMismatch>NEUTRAL</onMismatch>
                </filter>
                <filter class="ch.qos.logback.classic.filter.LevelFilter">
                    <level>WARN</level>
                    <onMatch>DENY</onMatch>
                    <onMismatch>NEUTRAL</onMismatch>
                </filter>
                <filter class="ch.qos.logback.classic.filter.LevelFilter">
                    <level>ERROR</level>
                    <onMatch>DENY</onMatch>
                    <onMismatch>NEUTRAL</onMismatch>
                </filter>
                <layout class="ch.qos.logback.classic.PatternLayout">
                    <pattern>${PATTERN}</pattern>
                </layout>
            </appender>
            <appender name="r-info" class="ch.qos.logback.core.rolling.RollingFileAppender">
                <!-- Support multiple-JVM writing to the same log file -->
                <prudent>true</prudent>
                <file>${log_root}/${project_name}.log</file>
                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                    <fileNamePattern>${prd_log_path}/%d{yyyyMMdd/HH}.info</fileNamePattern>
                </rollingPolicy>
                <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                    <level>INFO</level>
                </filter>
                <layout class="ch.qos.logback.classic.PatternLayout">
                    <pattern>${PATTERN}</pattern>
                </layout>
            </appender>
            <appender name="r-error" class="ch.qos.logback.core.rolling.RollingFileAppender">
                <!-- Support multiple-JVM writing to the same log file -->
                <prudent>true</prudent>
                <file>${log_root}/${project_name}.log</file>
                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                    <fileNamePattern>${prd_log_path}/error-%d{yyyyMM}.log</fileNamePattern>
                </rollingPolicy>
                <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                    <level>ERROR</level>
                </filter>
                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                    <fileNamePattern>${prd_log_path}/error-%d{yyyy-MM-dd}.log</fileNamePattern>
                </rollingPolicy>
                <layout class="ch.qos.logback.classic.PatternLayout">
                    <pattern>${PATTERN}</pattern>
                </layout>
            </appender>
            <root level="info">
                <appender-ref ref="r-debug"/>
                <appender-ref ref="r-info"/>
                <appender-ref ref="r-error"/>
            </root>
        </springProfile>
    </configuration>

    此上的配置是基于多环境配置的:据不同环境(prod:生产环境,test:测试环境,dev:开发环境)来定义不同的日志输出,在 logback-boot.xml中使用 springProfile 节点来定义 

    总结:其实具体配置也没多少内容都是copy的项目中的配置,具体配置内容感兴趣的可以自行研究;集成日志的过程大概是:在根路径下创建自定义的日志文件logback-boot.xml,然后在application中指定下文件路径;之后就可以在项目中使用

    本篇博文仅供lz自学研究:如有不当之处欢迎指正。

                     

  • 相关阅读:
    vs2015安装编辑神器:resharper10.0
    Selenium_等待页面加载完毕
    自动化操作——JS
    C# 反射 List和字典Dictionary
    Selenium无法点击元素,报错:ElementClickInterceptedException:element click intercepted
    GeckoWebBrowser多窗口独立cookie
    Selenium + WebDriver 各浏览器驱动下载地址
    使.NET WebBrowser不与IE或其他实例共享cookie
    关于element click intercepted报错解决办法
    Selenium调用使用360浏览器,QQ浏览器,遨游浏览器,猎豹浏览器,Chromium
  • 原文地址:https://www.cnblogs.com/chenpt/p/9303761.html
Copyright © 2020-2023  润新知