gpt4 book ai didi

logback配置中变量和include的应用方式

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章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 。

最后此篇关于logback配置中变量和include的应用方式的文章就讲到这里了,如果你想了解更多关于logback配置中变量和include的应用方式的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com