springboot使用logback-spring配置日志格式,並分環境配置


配置不生效的解決辦法

注意: 如果配置不生效,則說明spring優先加載了其他配置:
解決辦法:

  1. yml中添加指定文件 logging.config 屬性 classpath:logback-spring.xml

  2. 修改名字為 logback.xml, SpringBoot首先去查找標准的日志配置文件,如果找不到在去找拼接Spring的配置的文件, 標准文件名: "logback-test.groovy", "logback-test.xml", "logback.groovy","logback.xml" 等

  3. 排除 第三方jar包中的日志配置

如果xml中使用 獲取配置的內容,如果是默認的名字,logback.xml或者logback-spirng.xml,則因為會加載兩次原因,會先生成一個空的IS_UNDEFINED文件和日志
最好的處理辦法,是自定義日志xml.比如叫logbak-myself.xml ,然后yml指定文件名稱 logging.config就可以了

springboot中使用這個LoggingApplicationListener類進行初始化,具體流程可查源碼

logback以-spring結尾的可以使用springboot的分環境注入特性:
直接貼代碼,放到resource下面就行了:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    
    <!-- logback-spring 的文件可以基於環境配置,相對路徑會默認成項目根目錄開始 -->
    <springProfile name="comp">
        <property name="LOG_HOME" value="/home/houzheng/logs"/>
    </springProfile>
    <!-- home環境,windows -->
    <springProfile name="home">
        <property name="LOG_HOME" value="D:/logs"/>
    </springProfile>

   <!--定義輸出格式,可以帶顏色-->
    <property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n"/>
    <property name="PATTERN_COLOR"
              value="%yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%thread] %highlight(%-5level) %green(%logger{50}) - %highlight(%msg) %n"/>

    <!--控制台輸出appender-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!--設置輸出格式-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <!--設置編碼-->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--文件輸出,時間窗口滾動-->
    <appender name="timeFileOutput" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志名,指定最新的文件名,其他文件名使用FileNamePattern -->
        <File>${LOG_HOME}/timeFile/out.log</File>
        <!--文件滾動模式-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件輸出的文件名,可設置文件類型為gz,開啟文件壓縮-->
            <FileNamePattern>${LOG_HOME}/timeFile/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 class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <!--設置編碼-->
            <charset>UTF-8</charset>
        </encoder>

    </appender>

    <!--指定基礎的日志輸出級別-->
    <root level="INFO">
        <!--appender將會添加到這個loger,console會輸出一個默認的日志文件,導致日志重復輸出,建議生產關掉,只會使用file輸出保存-->
        <appender-ref ref="console"/>
        <appender-ref ref="timeFileOutput"/>
    </root>

    <!-- 單獨指定某個包的日志打印,級別,appender等   -->
    <!-- addtivity: 可選。是否向上級 loger(也就是 root 節點)傳遞打印信息。默認為 true,
        設置addtivity是因為這里已經指定了appender,如果再向上傳遞就會被root下的appender再次打印 -->
<!--    <logger name="com.hou.postgresql.user.service.impl.TestUserServiceImpl" level="WARN" addtivity="false">-->
<!--        <appender-ref ref="console"/>-->
<!--    </logger>-->

     <!-- 單獨指定某個包的日志打印,級別,appender等,也可以在代碼中使用 name屬性獲取 LoggerFactory.getLogger("LogName");   -->
     <logger name="AudiLogNameFormat" level="info" additivity="false">
        <appender-ref ref="Log"/>
    </logger>
</configuration>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM