SpringBoot Logback多環(huán)境日志配置

直入主題

  1. application.yml作為公共配置中心懂更,一些共有的配置可以寫在這里面疼进。這里需要配置當(dāng)前開發(fā)環(huán)境logback的日志記錄拍谐,例如需要配置dev環(huán)境的日志記錄渔呵,如需改成生產(chǎn)環(huán)境的配置,只需將dev改成prod
spring:
  profiles:
    active: dev
  1. 新建application-dev.yml文件表示是開發(fā)環(huán)境的配置中心荠雕;
    新建application-prod.yml表示是生產(chǎn)環(huán)境的配置中心稳其。
    在1步驟中已經(jīng)指明active: dev那么springboot會去配置application-dev.yml里面的配置驶赏。
    application-dev.yml加入如下配置
logging:
  config: classpath:conf/logback-dev.xml

同理生產(chǎn)環(huán)境就在application-prod.yml配置

logging:
  config: classpath:conf/logback-prod.xml
  1. 在resources新建conf文件夾
  2. 新建logback-dev.xml,為簡單同步配置記錄方式
<?xml version="1.0" encoding="UTF-8"?>
<!-- 不分級別同步文件日志輸出配置 -->
<configuration>
    <!-- 日志級別 -->
    <property name="logLevel" value="ERROR"></property>
    <!-- 日志地址 -->
    <property name="logPath" value="./logs"></property>
    <!-- 最大保存時間 -->
    <property name="maxHistory" value="10"/>
    <!-- 異步緩沖隊列的深度,該值會影響性能.默認(rèn)值為256 -->
    <property name="queueSize" value="512"></property>
    <!--日志文件名前綴-->
    <property name="name" value="dev"></property>

    <!-- 控制臺打印日志的相關(guān)配置 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 日志格式 -->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
        </encoder>
    </appender>

    <!-- 文件保存日志的相關(guān)配置既鞠,同步 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 保存日志文件的路徑 -->
        <file>${logPath}/${name}.log</file>
        <!-- 日志格式 -->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>${logLevel}</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 循環(huán)政策:基于時間創(chuàng)建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${logPath}/${name}-%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 最大保存時間-->
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
    </appender>


    <!--配置mybatis sql 日志-->
    <logger name="com.wtwd.springboot.mapper" level="DEBUG"/>
    <!-- 基于INFO處理日志:具體控制臺或者文件對日志級別的處理還要看所在appender配置的filter煤傍,如果沒有配置filter,則使用root配置 -->
    <root level="${logLevel}">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>
</configuration>
  1. 新建logback-prod.xml嘱蛋,為異步分級別記錄方式
<?xml version="1.0" encoding="UTF-8"?>

<!-- 分級別異步文件日志輸出配置 -->
<configuration>
    <!-- 日志級別 -->
    <property name="logLevel" value="INFO"></property>
    <!-- 日志地址 -->
    <property name="logPath" value="./logs"></property>
    <!-- 最大保存時間 -->
    <property name="maxHistory" value="30"/>
    <!-- 異步緩沖隊列的深度,該值會影響性能.默認(rèn)值為256 -->
    <property name="queueSize" value="512"></property>
    <!--日志文件名前綴-->
    <property name="name" value="prod"></property>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
        </encoder>
    </appender>

    <appender name="FILE_DEBUG"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <file>${logPath}/${name}_debug.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/${name}_debug.log.%d{yyyy-MM-dd}.zip
            </fileNamePattern>
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="FILE_INFO"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <file>${logPath}/${name}_info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/${name}_info.log.%d{yyyy-MM-dd}.zip
            </fileNamePattern>
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="FILE_WARN"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <file>${logPath}/${name}_warn.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/${name}_warn.log.%d{yyyy-MM-dd}.zip
            </fileNamePattern>
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="FILE_ERROR"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <file>${logPath}/${name}_error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/${name}_error.log.%d{yyyy-MM-dd}.zip
            </fileNamePattern>
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="ASYNC_LOG_DEBUG" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丟失日志.默認(rèn)的,如果隊列的80%已滿,則會丟棄TRACT蚯姆、DEBUG、INFO級別的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默認(rèn)的隊列的深度,該值會影響性能.默認(rèn)值為256 -->
        <queueSize>${queueSize}</queueSize>
        <appender-ref ref="FILE_DEBUG"/>
    </appender>
    <appender name="ASYNC_LOG_INFO" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丟失日志.默認(rèn)的,如果隊列的80%已滿,則會丟棄TRACT洒敏、DEBUG龄恋、INFO級別的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默認(rèn)的隊列的深度,該值會影響性能.默認(rèn)值為256 -->
        <queueSize>${queueSize}</queueSize>
        <appender-ref ref="FILE_INFO"/>
    </appender>
    <appender name="ASYNC_LOG_WARN" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丟失日志.默認(rèn)的,如果隊列的80%已滿,則會丟棄TRACT、DEBUG凶伙、INFO級別的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默認(rèn)的隊列的深度,該值會影響性能.默認(rèn)值為256 -->
        <queueSize>${queueSize}</queueSize>
        <appender-ref ref="FILE_WARN"/>
    </appender>
    <appender name="ASYNC_LOG_ERROR" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丟失日志.默認(rèn)的,如果隊列的80%已滿,則會丟棄TRACT郭毕、DEBUG、INFO級別的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默認(rèn)的隊列的深度,該值會影響性能.默認(rèn)值為256 -->
        <queueSize>${queueSize}</queueSize>
        <appender-ref ref="FILE_ERROR"/>
    </appender>
    <root level="${logLevel}">
        <!-- appender referenced after it is defined -->
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="ASYNC_LOG_DEBUG"/>
        <appender-ref ref="ASYNC_LOG_INFO"/>
        <appender-ref ref="ASYNC_LOG_WARN"/>
        <appender-ref ref="ASYNC_LOG_ERROR"/>
    </root>
</configuration>
  1. 執(zhí)行測試函荣,生成的日志文件會在當(dāng)前工程下的logs文件夾內(nèi)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末显押,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子傻挂,更是在濱河造成了極大的恐慌乘碑,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件金拒,死亡現(xiàn)場離奇詭異兽肤,居然都是意外死亡,警方通過查閱死者的電腦和手機殖蚕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沉迹,“玉大人睦疫,你說我怎么就攤上這事”夼唬” “怎么了蛤育?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長葫松。 經(jīng)常有香客問我瓦糕,道長,這世上最難降的妖魔是什么腋么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任咕娄,我火速辦了婚禮,結(jié)果婚禮上珊擂,老公的妹妹穿的比我還像新娘圣勒。我一直安慰自己费变,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布圣贸。 她就那樣靜靜地躺著挚歧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吁峻。 梳的紋絲不亂的頭發(fā)上滑负,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機與錄音用含,去河邊找鬼矮慕。 笑死,一個胖子當(dāng)著我的面吹牛耕餐,可吹牛的內(nèi)容都是我干的凡傅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼肠缔,長吁一口氣:“原來是場噩夢啊……” “哼夏跷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起明未,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤槽华,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后趟妥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體猫态,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年披摄,在試婚紗的時候發(fā)現(xiàn)自己被綠了亲雪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡疚膊,死狀恐怖义辕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情寓盗,我是刑警寧澤灌砖,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站傀蚌,受9級特大地震影響基显,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜善炫,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一撩幽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧箩艺,春花似錦摸航、人聲如沸制跟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雨膨。三九已至,卻和暖如春读串,著一層夾襖步出監(jiān)牢的瞬間聊记,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工恢暖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留排监,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓杰捂,卻偏偏與公主長得像舆床,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嫁佳,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容