logback-spring.xml
4.89 KB
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds" debug="false">
<property name="LOG_NAME" value="cashier-service" />
<property name="APP_BASE_DIR" value="${user.dir}" />
<property name="LOG_HOME" value="${APP_BASE_DIR}/logs" />
<property name="LOG_HISTORY_DIR" value="${LOG_HOME}/history" />
<property name="LOG_CHARSET" value="UTF-8" />
<property name="ASYNC_QUEUE_SIZE" value="1024" />
<springProperty scope="context" name="profile" source="spring.profiles.active" defaultValue="dev" />
<property name="LOG_PATTERN" value="%d %-5level [${LOG_NAME}-${profile}] [%t] [%c:%L] -| %msg%n" />
<statusListener class="ch.qos.logback.core.status.NopStatusListener" />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<target>System.out</target>
<encoder>
<charset>${LOG_CHARSET}</charset>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<!-- 过滤器:只输出INFO及以上级别,减少控制台冗余 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/${LOG_NAME}.log</file>
<append>true</append>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 日志命名:按天分类,按大小分卷,自动压缩为zip -->
<fileNamePattern>${LOG_HISTORY_DIR}/${LOG_NAME}_%d{yyyy-MM-dd}_%i.log.zip</fileNamePattern>
<!-- 日志保留30天,自动清理过期日志 -->
<maxHistory>30</maxHistory>
<!-- 单个日志文件最大60MB(减少切割次数) -->
<maxFileSize>60MB</maxFileSize>
<!-- 总日志大小上限10GB,防止磁盘占满 -->
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
<encoder>
<charset>${LOG_CHARSET}</charset>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<!-- 过滤器:只输出DEBUG及以上级别 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>
</appender>
<appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="FILE" />
<!-- 队列大小:根据业务并发调整 -->
<queueSize>${ASYNC_QUEUE_SIZE}</queueSize>
<!-- 超出队列时不阻塞业务线程(生产环境关键) -->
<neverBlock>true</neverBlock>
<!-- 丢弃策略:超出队列时丢弃TRACE/DEBUG级日志 -->
<discardingThreshold>0</discardingThreshold>
<!-- 包含调用者数据,避免异步日志丢失异常栈 -->
<includeCallerData>true</includeCallerData>
</appender>
<!-- ************************ 多环境日志配置 ************************ -->
<!-- 开发环境:仅控制台输出 -->
<springProfile name="dev">
<root level="INFO">
<appender-ref ref="CONSOLE" />
</root>
<logger name="com.diligrp.cashier" level="DEBUG" additivity="false">
<appender-ref ref="CONSOLE" />
</logger>
<logger name="com.alibaba" level="ERROR" additivity="false">
<appender-ref ref="CONSOLE" />
</logger>
</springProfile>
<!-- 测试环境:控制台+异步文件输出 -->
<springProfile name="test">
<root level="INFO">
<appender-ref ref="CONSOLE" />
</root>
<logger name="com.diligrp.cashier" level="DEBUG" additivity="false">
<appender-ref ref="ASYNC_FILE" />
</logger>
<logger name="com.alibaba" level="ERROR" additivity="false">
<appender-ref ref="CONSOLE" />
<appender-ref ref="ASYNC_FILE" />
</logger>
</springProfile>
<!-- 灰度/生产环境:控制台+异步文件输出 -->
<springProfile name="pre,prod">
<root level="INFO">
<appender-ref ref="CONSOLE" />
</root>
<logger name="com.diligrp.cashier" level="DEBUG" additivity="false">
<appender-ref ref="ASYNC_FILE" />
</logger>
<logger name="com.alibaba" level="ERROR" additivity="false">
<appender-ref ref="CONSOLE" />
<appender-ref ref="ASYNC_FILE" />
</logger>
</springProfile>
<!-- ************************ 通用框架日志配置 ************************ -->
<logger name="org.springframework" level="WARN" additivity="false">
<appender-ref ref="CONSOLE" />
</logger>
<logger name="org.mybatis" level="WARN" additivity="false">
<appender-ref ref="CONSOLE" />
</logger>
</configuration>