激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - logback配置中變量和include的應用方式

logback配置中變量和include的應用方式

2021-12-09 12:54SonOfWind0311 Java教程

這篇文章主要介紹了logback配置中變量和include的應用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

logback配置中變量和include的應用

logback配置在實際應用中往往會遇到appender的配置中存在大量的重復內容,但是logback又不像編程語言一樣支持繼承,采用include和變量結合可以一定程度上解決這個問題。

Example:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name=WarnLogFile">
    <encoder>
        <charset>UTF-8</charset>
        <pattern>%d{dd.MMM.yyyy HH:mm:ss.SSS z}, [%6t], %6p, %C:%M %m%n</pattern>
    </encoder>
    <file>${LOGS_DIR}/warn.log</file>
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <maxFileSize>40MB</maxFileSize>
    </triggeringPolicy>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <fileNamePattern>${LOGS_DIR}/warn%i.log.gz</fileNamePattern>
        <minIndex>1</minIndex>
        <maxIndex>21</maxIndex>
    </rollingPolicy>
</appender>
<appender class="ch.qos.logback.classic.AsyncAppender" name="Warn">
    <queueSize>2048</queueSize>
    <includeCallerData>true</includeCallerData>
    <discardingThreshold>0</discardingThreshold>
    <appender-ref ref="WarnLogFile" />
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>WARN</level>
    </filter>
</appender>
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="InfoLogFile">
    <encoder>
        <charset>UTF-8</charset>
        <pattern>%d{dd.MMM.yyyy HH:mm:ss.SSS z}, [%6t], %6p, %C:%M %m%n</pattern>
    </encoder>
    <file>${LOGS_DIR}/info.log</file>
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <maxFileSize>10MB</maxFileSize>
    </triggeringPolicy>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <fileNamePattern>${LOGS_DIR}/info%i.log.gz</fileNamePattern>
        <minIndex>1</minIndex>
        <maxIndex>21</maxIndex>
    </rollingPolicy>
</appender>
<appender class="ch.qos.logback.classic.AsyncAppender" name="info">
    <queueSize>2048</queueSize>
    <includeCallerData>true</includeCallerData>
    <discardingThreshold>0</discardingThreshold>
    <appender-ref ref="infoLogFile" />
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>INFO</level>
    </filter>
</appender>
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="DebugLogFile">
    <encoder>
        <charset>UTF-8</charset>
        <pattern>%d{dd.MMM.yyyy HH:mm:ss.SSS z}, [%6t], %6p, %C:%M %m%n</pattern>
    </encoder>
    <file>${LOGS_DIR}/debug.log</file>
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <maxFileSize>5MB</maxFileSize>
    </triggeringPolicy>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <fileNamePattern>${LOGS_DIR}/debug%i.log.gz</fileNamePattern>
        <minIndex>1</minIndex>
        <maxIndex>21</maxIndex>
    </rollingPolicy>
</appender>
<appender class="ch.qos.logback.classic.AsyncAppender" name="Debug">
    <queueSize>2048</queueSize>
    <includeCallerData>true</includeCallerData>
    <discardingThreshold>0</discardingThreshold>
    <appender-ref ref="DebugLogFile" />
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>DEBUG</level>
    </filter>
</appender>

可以看到以上的三個定義存在大量的重復內容會導致logback文件很大,不容易維護,結合變量和include則可以一定程度上解決這個問題。

首先把配置內容抽取一個公共文件default.xml

把不同的內容用變量定義:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<included>
    <appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="${FILE_APPENDER}">
        <encoder>
            <charset>UTF-8</charset>
            <pattern>%d{dd.MMM.yyyy HH:mm:ss.SSS z}, [%6t], %6p, %C:%M %m%n</pattern>
        </encoder>
        <file>${LOGS_DIR}/${LOGFILE}.log</file>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>5MB</maxFileSize>
        </triggeringPolicy>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${LOGS_DIR}/${LOGFILE}%i.log.gz</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>21</maxIndex>
        </rollingPolicy>
    </appender>
    <appender class="ch.qos.logback.classic.AsyncAppender" name="${ASYNC_APPENDER}">
        <queueSize>2048</queueSize>
        <includeCallerData>true</includeCallerData>
        <discardingThreshold>0</discardingThreshold>
        <appender-ref ref="${FILE_APPENDER}" />
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>${LOG_LEVEL}</level>
        </filter>
    </appender>
</included>

然后基于公共文件定義各自的配置

warn.xml:

?
1
2
3
4
5
6
7
8
<included>
    <property scope="local" name="LOGFILE" value="warn" />
    <property scope="local" name="FILE_APPENDER" value="WarnLogFile" />
    <property scope="local" name="ASYNC_APPENDER" value="warn" />
    <property scope="local" name="LOG_LEVEL" value="WARN" />
    
    <include file="${LOGS_CUSTOM_DIR}/default.xml"/>
</included>

info.xml:

?
1
2
3
4
5
6
7
8
<included>
    <property scope="local" name="LOGFILE" value="info" />
    <property scope="local" name="FILE_APPENDER" value="InfoLogFile" />
    <property scope="local" name="ASYNC_APPENDER" value="info" />
    <property scope="local" name="LOG_LEVEL" value="INFO" />
    
    <include file="${LOGS_CUSTOM_DIR}/default.xml"/>
</included>

debug.xml:

?
1
2
3
4
5
6
7
8
<included>
    <property scope="local" name="LOGFILE" value="debug" />
    <property scope="local" name="FILE_APPENDER" value="DebugLogFile" />
    <property scope="local" name="ASYNC_APPENDER" value="debug" />
    <property scope="local" name="LOG_LEVEL" value="DEBUG" />
    
    <include file="${LOGS_CUSTOM_DIR}/default.xml"/>
</included>

最后在logback.xml中就可以include上面定義的文件

?
1
2
3
4
5
6
7
8
9
<include file="${LOGS_CUSTOM_DIR}/warn.xml"/>
<include file="${LOGS_CUSTOM_DIR}/info.xml"/>
<include file="${LOGS_CUSTOM_DIR}/debug.xml"/>
<root level="DEBUG">
    ...
    <appender-ref ref="warn"/>
    <appender-ref ref="info"/>
    <appender-ref ref="debug"/>
</root>

logback.xml導入(include)其他項目配置的logback.xml文件

1、其他項目存在的logback.xml文件需要下面這種形式的配置 ?

下面的這個配置文件的意思是定義了兩個appender,這兩個appender中名為ASYNC-LOG的appender是將com.xx.cloud.trail.client.async路徑下面產生的級別為error的日志進行收集,保存在定義的文件夾下面,另一個appender同理,如果這個logback.xml文件想在其他的項目中被引用那么就需要用在iucluded標簽將定義的appender跟logger包圍起來,表示這個是可以被導入其他項目的

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?xml version="1.0" encoding="UTF-8"?>
    <included>
    <appender name="ASYNC_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件輸出的文件名-->
            <FileNamePattern>/var/log/xx/cloud/trail/async/error.log.%d{yyyy-MM-dd}.log</FileNamePattern>
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder
                class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <!-- 日志輸出編碼 -->
            <layout class="ch.qos.logback.classic.PatternLayout">
                <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
                </pattern>
            </layout>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>
    <appender name="AOP_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件輸出的文件名-->
            <FileNamePattern>/var/log/xx/cloud/trail/aop/error.log.%d{yyyy-MM-dd}.log</FileNamePattern>
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder
                class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <!-- 日志輸出編碼 -->
            <layout class="ch.qos.logback.classic.PatternLayout">
                <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
                </pattern>
            </layout>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>
    <!--需要將日志單獨輸出的包路徑-->
    <logger name="com.xx.cloud.trail.client.async" level="ERROR" additivity="false">
        <appender-ref ref="ASYNC_LOG"/>
    </logger>
    <!--需要將日志單獨輸出的包路徑-->
    <logger name="com.xx.cloud.trail.client.aop" level="ERROR" additivity="false">
        <appender-ref ref="AOP_LOG"/>
    </logger>
    </included>

2、其他項目的配置

假如1中的配置logback.xml文件的名稱為logback-trail.xml,那么需要在其他的項目的logback.xml文件中加入一句

表示導入其他項目的logback文件,這樣就能將其他項目中的配置文件進行導入

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?xml version="1.0" encoding="UTF-8"?>
<!--
    scan: 當此屬性設置為true時,配置文件如果發生改變,將會被重新加載,默認值為true。
    scanPeriod: 設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。當scan為true時,此屬性生效。默認的時間間隔為1分鐘。
    debug: 當此屬性設置為true時,將打印出logback內部日志信息,實時查看logback運行狀態。默認值為false。
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <include resource="logback-trail.xml"/>
    <!--配置日志輸出到的路徑-->
    <springProperty scop="context" name="logging.path" source="logging.path"
                    defaultValue="logging-path-not-find"/>
    <property name="log.path" value="${logging.path}"/>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="TRAIL_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件輸出的文件名-->
            <FileNamePattern>${logging.path}/trail/trail.log.%d{yyyy-MM-dd}.log</FileNamePattern>
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder
                class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <!-- 日志輸出編碼 -->
            <layout class="ch.qos.logback.classic.PatternLayout">
                <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
                </pattern>
            </layout>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>
    <!-- 日志輸出級別 -->
    <root level="DEBUG">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="TRAIL_LOG"/>
    </root>
</configuration>

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/SonOfWind0311/article/details/86751159

延伸 · 閱讀

精彩推薦
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
主站蜘蛛池模板: 国产午夜精品久久久 | 欧美一级α片 | 精品国产一区二区三区在线观看 | 国产高清自拍一区 | 九草网 | 污污短视频 | 中文字幕综合在线观看 | 国产一区二区三区影视 | 视屏一区| 天堂亚洲一区 | av色先锋| 黄色伊人网站 | 久久17| 国产一区二区三区在线免费 | 成人亚洲一区 | 国色天香综合网 | 亚洲午夜不卡 | 色av综合在线 | 韩国一级免费视频 | 久久艹一区 | 亚洲国产在| 日本精品免费观看 | 亚洲精品一区二区三区在线看 | 久久久久久久国产视频 | 一区二区三区日本在线观看 | 免费专区 - 91爱爱 | 91香蕉国产亚洲一区二区三区 | 天堂福利电影 | 国产激情视频在线 | 日日噜噜噜夜夜狠狠久久蜜桃 | 中国女警察一级毛片视频 | 噜噜噜影院 | 麻豆视频在线观看免费网站 | 欧美亚洲一级 | 亚洲精品 在线播放 | 国产免费人做人爱午夜视频 | 久久久久一本一区二区青青蜜月 | 国产成人精品二区 | 精品欧美一区二区精品久久 | 国产精品99久久免费观看 | av在线等 |