1.普通java程序
如下配置的logback.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
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
|
<? xml version = "1.0" encoding = "UTF-8" ?>
< configuration >
< property name = "LOGS_HOME" value = "/opt/program/app/logback-demo/logs" />
<!-- 该值由启动程序时候动态传入 -->
< property name = "SUB_LOG_HOME" value = "" />
< property name = "LOG_PATTERN" value = "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{25} - %msg%n" />
< property name = "LOG_CHARSET" value = "UTF-8" />
< appender name = "STDOUT" class = "ch.qos.logback.core.ConsoleAppender" >
< encoder >
< pattern >${LOG_PATTERN}</ pattern >
< charset >${LOG_CHARSET}</ charset >
</ encoder >
</ appender >
< appender name = "FILE" class = "ch.qos.logback.core.rolling.RollingFileAppender" >
< file >${LOGS_HOME}/${SUB_LOG_HOME}/logback-demo.log</ file >
< encoder >
< pattern >${LOG_PATTERN}</ pattern >
< charset >${LOG_CHARSET}</ charset >
</ encoder >
< rollingPolicy class = "ch.qos.logback.core.rolling.TimeBasedRollingPolicy" >
< fileNamePattern >${LOGS_HOME}/${SUB_LOG_HOME}/logback-demo-%d{yyyy-MM-dd}.log</ fileNamePattern >
< maxHistory >30</ maxHistory >
</ rollingPolicy >
</ appender >
< appender name = "ERRORFILE" class = "ch.qos.logback.core.rolling.RollingFileAppender" >
< file >${LOGS_HOME}/${SUB_LOG_HOME}/logback-demo.error.log</ file >
< rollingPolicy class = "ch.qos.logback.core.rolling.TimeBasedRollingPolicy" >
< fileNamePattern >${LOGS_HOME}/${SUB_LOG_HOME}/logback-demo-%d{yyyy-MM-dd}.error.log</ fileNamePattern >
< maxHistory >20</ maxHistory >
</ rollingPolicy >
< encoder >
< pattern >${LOG_PATTERN}</ pattern >
< immediateFlush >true</ immediateFlush >
</ encoder >
< filter class = "ch.qos.logback.classic.filter.LevelFilter" >
< level >ERROR</ level >
< onMatch >ACCEPT</ onMatch >
< onMismatch >DENY</ onMismatch >
</ filter >
</ appender >
< root level = "info" >
< appender-ref ref = "STDOUT" />
< appender-ref ref = "FILE" />
< appender-ref ref = "ERRORFILE" />
</ root >
</ configuration >
|
property标签由name和value组成,上边定义的name可以在下边通过${name}引用。
value的值可以直接在xml中写死,也可以通过程序启动时候通过jvm虚拟机参数配置来传入,比如此处是-DSUB_LOG_HOME=xxx。
idea中配置:
2.spring boot应用
spring boot应用中将logback-spring.xml放置在resources目录,内容如下:
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
73
74
75
76
77
78
79
80
|
<? xml version = "1.0" encoding = "UTF-8" ?>
< configuration xmlns = "http://ch.qos.logback/xml/ns/logback" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://ch.qos.logback/xml/ns/logback http://ch.qos.logback/xml/ns/logback/logback.xsd"
debug = "true" scan = "false" scanPeriod = "30 seconds" >
< springProperty scope = "context" name = "logPath" source = "logback.logPath" />
< springProperty scope = "context" name = "subLogPath" source = "logback.subLogPath" />
<!--spring-boot-1.5.10.RELEASE.jar!/org/springframework/boot/logging/logback/defaults.xml-->
< conversionRule conversionWord = "clr" converterClass = "org.springframework.boot.logging.logback.ColorConverter" />
< conversionRule conversionWord = "wex" converterClass = "org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
< conversionRule conversionWord = "wEx" converterClass = "org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
< property name = "LOG_HOME" value = "${logPath}" />
<!-- 该值由启动程序时候动态传入 -->
< property name = "SUB_LOG_HOME" value = "${subLogPath}" />
< property name = "LOG_NAME" value = "data-middleware-server-realtime" />
< property name = "CONSOLE_LOG_PATTERN" value = "${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39} %line){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />
< property name = "FILE_LOG_PATTERN" value = "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{25} %line - %msg%n" />
< appender name = "STDOUT" class = "ch.qos.logback.core.ConsoleAppender" >
< encoder >
< pattern >${CONSOLE_LOG_PATTERN}</ pattern >
</ encoder >
</ appender >
< appender name = "FILE" class = "ch.qos.logback.core.rolling.RollingFileAppender" >
< file >${LOG_HOME}/${SUB_LOG_HOME}/${LOG_NAME}.log</ file >
< rollingPolicy class = "ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy" >
< fileNamePattern >${LOG_HOME}/${SUB_LOG_HOME}/${LOG_NAME}.log-%d{yyyy-MM-dd}.%i.zip</ fileNamePattern >
< maxHistory >20</ maxHistory >
< maxFileSize >100MB</ maxFileSize >
</ rollingPolicy >
< encoder >
< pattern >${FILE_LOG_PATTERN}</ pattern >
< immediateFlush >true</ immediateFlush >
</ encoder >
</ appender >
< appender name = "ERRORFILE" class = "ch.qos.logback.core.rolling.RollingFileAppender" >
< file >${LOG_HOME}/${SUB_LOG_HOME}/${LOG_NAME}.error.log</ file >
< rollingPolicy class = "ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy" >
< fileNamePattern >${LOG_HOME}/${SUB_LOG_HOME}/${LOG_NAME}.error.log-%d{yyyy-MM-dd}.%i.zip</ fileNamePattern >
< maxHistory >20</ maxHistory >
< maxFileSize >100MB</ maxFileSize >
</ rollingPolicy >
< encoder >
< pattern >${FILE_LOG_PATTERN}</ pattern >
< immediateFlush >true</ immediateFlush >
</ encoder >
< filter class = "ch.qos.logback.classic.filter.LevelFilter" >
< level >ERROR</ level >
< onMatch >ACCEPT</ onMatch >
< onMismatch >DENY</ onMismatch >
</ filter >
</ appender >
< appender name = "REALTIME_IMPORT_APPENDER" class = "ch.qos.logback.core.rolling.RollingFileAppender" >
< file >${LOG_HOME}/${SUB_LOG_HOME}/import/${LOG_NAME}.log</ file >
< encoder >
< pattern >${FILE_LOG_PATTERN}</ pattern >
< immediateFlush >true</ immediateFlush >
</ encoder >
< rollingPolicy class = "ch.qos.logback.core.rolling.TimeBasedRollingPolicy" >
< fileNamePattern >${LOG_HOME}/${SUB_LOG_HOME}/import/${LOG_NAME}-%d{yyyy-MM-dd}.log</ fileNamePattern >
< maxHistory >7</ maxHistory >
</ rollingPolicy >
</ appender >
< logger name = "REALTIME_IMPORT_LOGGER" level = "INFO" additivity = "false" >
< appender-ref ref = "REALTIME_IMPORT_APPENDER" />
</ logger >
< logger name = "org.apache.zookeeper.ZooKeeper" level = "WARN" additivity = "true" ></ logger >
< logger name = "org.apache.zookeeper.ClientCnxn" level = "WARN" additivity = "true" ></ logger >
< root level = "DEBUG" >
< appender-ref ref = "STDOUT" />
< appender-ref ref = "FILE" />
< appender-ref ref = "ERRORFILE" />
</ root >
</ configuration >
|
该配置文件中除了使用<property>还使用了<springProperty>其中source为引用的spring配置中的变量,比如此处是logback.logPath和logback.subLogPath这两个值的传入可以通过spring boot配置文件传入,也可以通过程序启动时候动态传入,比如--logback.subLogPath=xxx
补充:logback.xml 自动读取日志存储路径
文件的命名和加载顺序有关logback.xml早于application.yml加载,logback-spring.xml晚于application.yml加载
如果logback配置需要使用application.yml中的属性,需要命名为logback-spring.xml
logback使用application.yml中的属性
使用springProperty才可使用application.yml中的值 可以设置默认值
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
<? xml version = "1.0" encoding = "UTF-8" ?>
< configuration >
<!--
说明:
1. 文件的命名和加载顺序有关
logback.xml早于application.yml加载,logback-spring.xml晚于application.yml加载
如果logback配置需要使用application.yml中的属性,需要命名为logback-spring.xml
2. logback使用application.yml中的属性
使用springProperty才可使用application.yml中的值 可以设置默认值
-->
< springProperty scope = "context" name = "logName" source = "ruoyi.logPath" defaultValue = "default" />
< property name = "log.path" value = "${logName}" />
<!-- 日志存放路径 -->
<!-- <property name="log.path" value="D:/zmSmartClassroom/logs"/>-->
<!-- <property name="log.path" value="/home/zmSmartClassroom/logs"/>-->
<!-- 日志输出格式 -->
< property name = "log.pattern" value = "%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
<!-- 控制台输出 -->
< appender name = "console" class = "ch.qos.logback.core.ConsoleAppender" >
< encoder >
< pattern >${log.pattern}</ pattern >
</ encoder >
</ appender >
<!-- 系统日志输出 -->
< appender name = "file_info" class = "ch.qos.logback.core.rolling.RollingFileAppender" >
< file >${log.path}/sys-info.log</ file >
<!-- 循环政策:基于时间创建日志文件 -->
< rollingPolicy class = "ch.qos.logback.core.rolling.TimeBasedRollingPolicy" >
<!-- 日志文件名格式 -->
< fileNamePattern >${log.path}/sys-info.%d{yyyy-MM-dd}.log</ fileNamePattern >
<!-- 日志最大的历史 60天 -->
< maxHistory >60</ maxHistory >
</ rollingPolicy >
< encoder >
< pattern >${log.pattern}</ pattern >
</ encoder >
< filter class = "ch.qos.logback.classic.filter.LevelFilter" >
<!-- 过滤的级别 -->
< level >INFO</ level >
<!-- 匹配时的操作:接收(记录) -->
< onMatch >ACCEPT</ onMatch >
<!-- 不匹配时的操作:拒绝(不记录) -->
< onMismatch >DENY</ onMismatch >
</ filter >
</ appender >
< appender name = "file_error" class = "ch.qos.logback.core.rolling.RollingFileAppender" >
< file >${log.path}/sys-error.log</ file >
<!-- 循环政策:基于时间创建日志文件 -->
< rollingPolicy class = "ch.qos.logback.core.rolling.TimeBasedRollingPolicy" >
<!-- 日志文件名格式 -->
< fileNamePattern >${log.path}/sys-error.%d{yyyy-MM-dd}.log</ fileNamePattern >
<!-- 日志最大的历史 60天 -->
< maxHistory >60</ maxHistory >
</ rollingPolicy >
< encoder >
< pattern >${log.pattern}</ pattern >
</ encoder >
< filter class = "ch.qos.logback.classic.filter.LevelFilter" >
<!-- 过滤的级别 -->
< level >ERROR</ level >
<!-- 匹配时的操作:接收(记录) -->
< onMatch >ACCEPT</ onMatch >
<!-- 不匹配时的操作:拒绝(不记录) -->
< onMismatch >DENY</ onMismatch >
</ filter >
</ appender >
<!-- 用户访问日志输出 -->
< appender name = "sys-user" class = "ch.qos.logback.core.rolling.RollingFileAppender" >
< file >${log.path}/sys-user.log</ file >
< rollingPolicy class = "ch.qos.logback.core.rolling.TimeBasedRollingPolicy" >
<!-- 按天回滚 daily -->
< fileNamePattern >${log.path}/sys-user.%d{yyyy-MM-dd}.log</ fileNamePattern >
<!-- 日志最大的历史 60天 -->
< maxHistory >60</ maxHistory >
</ rollingPolicy >
< encoder >
< pattern >${log.pattern}</ pattern >
</ encoder >
</ appender >
<!-- 系统模块日志级别控制 -->
< logger name = "com.ruoyi" level = "info" />
<!-- Spring日志级别控制 -->
< logger name = "org.springframework" level = "warn" />
< root level = "info" >
< appender-ref ref = "console" />
</ root >
<!--系统操作日志-->
< root level = "info" >
< appender-ref ref = "file_info" />
< appender-ref ref = "file_error" />
</ root >
<!--系统用户操作日志-->
< logger name = "sys-user" level = "info" >
< appender-ref ref = "sys-user" />
</ logger >
</ configuration >
|
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。如有错误或未考虑完全的地方,望不吝赐教。
原文链接:https://blog.csdn.net/catcher92/article/details/89674882