springboot如何使用logback-spring配置日志格式,并分環(huán)境配置
配置不生效的解決辦法
注意:如果配置不生效,則說明spring優(yōu)先加載了其他配置:
解決辦法:
- 添加啟動參數(shù)
-Dlogging.config=classpath:logback-spring.xml - 修改名字為
logback.xml,SpringBoot首先去查找標(biāo)準(zhǔn)的日志配置文件,如果找不到在去找拼接Spring的配置的文件, 標(biāo)準(zhǔn)文件名: "logback-test.groovy", "logback-test.xml", "logback.groovy","logback.xml" 等 - 排除 第三方j(luò)ar包中的日志配置
springboot中使用這個LoggingApplicationListener類進(jìn)行初始化,具體流程可查源碼
logback以-spring結(jié)尾的可以使用springboot的分環(huán)境注入特性:
直接貼代碼,放到resource下面就行了:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!-- logback-spring 的文件可以基于環(huán)境配置,相對路徑會默認(rèn)成項(xiàng)目根目錄開始 -->
<springProfile name="comp">
<property name="LOG_HOME" value="/home/houzheng/logs"/>
</springProfile>
<!-- home環(huán)境,windows -->
<springProfile name="home">
<property name="LOG_HOME" value="D:/logs"/>
</springProfile>
<!--控制臺輸出appender-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--設(shè)置輸出格式-->
<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>
<!--設(shè)置編碼-->
<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">
<!--日志文件輸出的文件名,可設(shè)置文件類型為gz,開啟文件壓縮-->
<FileNamePattern>${LOG_HOME}/timeFile/info.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天數(shù)-->
<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>
<!--設(shè)置編碼-->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--指定基礎(chǔ)的日志輸出級別-->
<root level="INFO">
<!--appender將會添加到這個loger-->
<appender-ref ref="console"/>
<appender-ref ref="timeFileOutput"/>
</root>
<!-- 單獨(dú)指定某個包的日志打印,級別,appender等 -->
<!-- addtivity: 可選。是否向上級 loger(也就是 root 節(jié)點(diǎn))傳遞打印信息。默認(rèn)為 true,
設(shè)置addtivity是因?yàn)檫@里已經(jīng)指定了appender,如果再向上傳遞就會被root下的appender再次打印 -->
<!-- <logger name="com.hou.postgresql.user.service.impl.TestUserServiceImpl" level="WARN" addtivity="false">-->
<!-- <appender-ref ref="console"/>-->
<!-- </logger>-->
<!-- 單獨(dú)指定某個包的日志打印,級別,appender等,也可以在代碼中使用 name屬性獲取 LoggerFactory.getLogger("LogName"); -->
<logger name="AudiLogNameFormat" level="info" additivity="false">
<appender-ref ref="Log"/>
</logger>
</configuration>
Springboot項(xiàng)目下的logback.xml
直接上模板,其中有注釋,在現(xiàn)有的項(xiàng)目里拷出來的。
<configuration>
<!-- %m輸出的信息,%p日志級別,%t線程名,%d日期,%c類的全名,,,, -->
<!-- 定義一個控制臺輸出的appender -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d %p (%file:%line\)- %m%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 定義一個變量 下面可以引用 -->
<property name="LOG_HOME" value="/log" />
<!-- 定義一個sql語句的日志文件存放位置 格式 規(guī)則 等信息 -->
<appender name="mysqllog"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志文件路徑 與項(xiàng)目同級 -->
<File>${LOG_HOME}/mysql.log</File>
<!-- 日志內(nèi)容規(guī)則 編碼方式 -->
<encoder>
<pattern>
%d %p (%file:%line\)- %m%n
</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- 設(shè)置日志的分文件規(guī)則 以及命名 個人理解默認(rèn)按天來分 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/mysql.log.%d.%i</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 設(shè)置日志文件最大size -->
<maxFileSize>64 MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<!-- 定義一個error的日志文件存放位置 格式 規(guī)則 等信息 -->
<appender name="errorlog"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志文件路徑 與項(xiàng)目同級 -->
<File>${LOG_HOME}/mysql.log</File>
<!-- 日志內(nèi)容規(guī)則 編碼方式 -->
<encoder>
<pattern>
%d %p (%file:%line\)- %m%n
</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- 設(shè)置日志的分文件規(guī)則 以及命名 個人理解默認(rèn)按天來分 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/mysql.log.%d.%i</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 設(shè)置日志文件最大size -->
<maxFileSize>64 MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<!-- 設(shè)置root全局日志的控制臺 使用上面第一個定義的'STDOUT' -->
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
<!-- 設(shè)置mapper相應(yīng)目錄下的sql語句的輸出 使用了定義的'mysqllog'和'STDOUT' 其中'mysqllog'是輸出到文件中 'STDOUT'是控制臺
additivity是否追加到root中 默認(rèn)true 如果為true則會在debug時打印兩條sql 所以這里為false -->
<logger name="com.xxx.mapper" level="DEBUG" additivity="false">
<appender-ref ref="mysqllog" />
<appender-ref ref="STDOUT" />
</logger>
<logger name="com.mytian.service" level="WARN">
</logger>
</configuration>
在項(xiàng)目中使用時:
Logger logger = LoggerFactory.getLogger(所在類名.class);
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
mybatis中BigDecimal中的0存為null的坑及解決
在使用MyBatis進(jìn)行數(shù)據(jù)庫操作時,若Java中屬性類型為BigDecimal且值為0,插入數(shù)據(jù)庫時可能會變?yōu)閚ull,而不是0,這個問題可能是由于MyBatis在處理BigDecimal類型時的弱類型判斷導(dǎo)致的,當(dāng)BigDecimal變量與空字符串進(jìn)行比較時,MyBatis可能將其視為null2024-10-10
java調(diào)用chatgpt接口來實(shí)現(xiàn)專屬于自己的人工智能助手
這篇文章主要介紹了用java來調(diào)用chatget的接口,實(shí)現(xiàn)自己的聊天機(jī)器人,對人工智能感興趣的小伙伴可以參考閱讀2023-03-03
如何使用Spring Security實(shí)現(xiàn)用戶-角色-資源的權(quán)限控制
文章介紹了如何通過SpringSecurity實(shí)現(xiàn)用戶-角色-資源的權(quán)限管理,包括基于角色的請求控制、加載用戶角色信息、角色與資源的關(guān)聯(lián)等步驟,同時,提供了一些測試場景,以驗(yàn)證權(quán)限控制是否正確,感興趣的朋友跟隨小編一起看看吧2024-10-10
Java操作IO對象流進(jìn)行數(shù)據(jù)的讀寫
這篇文章主要介紹了Java操作IO對象流進(jìn)行數(shù)據(jù)的讀寫,本文通過例子逐步介紹了java如何操作IO流,和文字解析,需要的朋友可以參考下2021-07-07
IntelliJ IDEA下Maven創(chuàng)建Scala項(xiàng)目的方法步驟
這篇文章主要介紹了IntelliJ IDEA下Maven創(chuàng)建Scala項(xiàng)目的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
java數(shù)據(jù)結(jié)構(gòu)和算法中哈希表知識點(diǎn)詳解
在本篇文章里小編給大家分享了關(guān)于java數(shù)據(jù)結(jié)構(gòu)和算法中哈希表的相關(guān)知識點(diǎn)內(nèi)容,需要的朋友們學(xué)習(xí)下。2019-06-06
Spring Boot集成SpringFox 3.0與Pageable參數(shù)處理方法
這篇文章主要介紹了Spring Boot集成SpringFox 3.0與Pageable參數(shù)處理,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-10-10

