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