Log4j

Log4j 1.X 配置

properties 格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Root logger option
log4j.rootLogger=INFO, file, stdout

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:\\logging.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

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
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true" xmlns:log4j='http://jakarta.apache.org/log4j/'>

<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
</appender>

<appender name="file" class="org.apache.log4j.RollingFileAppender">
<param name="append" value="false" />
<param name="maxFileSize" value="10MB" />
<param name="maxBackupIndex" value="10" />
<param name="file" value="${catalina.home}/logs/myStruts1App.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
</appender>

<root>
<level value="DEBUG" />
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>

</log4j:configuration>

Log4j 2.X 配置

Configuring

Log4j has the ability to automatically configure itself during initialization. When Log4j starts it will locate all the ConfigurationFactory plugins and arrange them in weighted order from highest to lowest. As delivered, Log4j contains four ConfigurationFactory implementations: one for JSON, one for YAML, one for properties, and one for XML.

Log4j will provide a default configuration if it cannot locate a configuration file. The default configuration, provided in the DefaultConfiguration.class, will set up: A ConsoleAppender attached to the root logger. A PatternLayout set to the pattern "%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" attached to the ConsoleAppender

Note that by default Log4j assigns the root logger to Level.ERROR.

Appenders

Layouts

1
2
3
4
5
6
7
8
9
10
additivity

monitorInterval

d|date{pattern}
T|tid|threadId
t|tn|thread|threadName
p|level{level=label, level=label, ...} p|level{length=n} p|level{lowerCase=true|false}
c{precision} | logger{precision}
C{precision} | class{precision}

示例

仅输出至控制台

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>

输出至文件,参考一

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
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%style{%d{HH:mm:ss.SSS}}{black} [%style{%t}{bright,blue}] %highlight{%p} %style{%c}{bright,yellow}: %m%n%throwable"/>
</Console>

<RollingFile name="RollingFile" fileName="${sys:logDir}/log4j2.log" filePattern="${sys:logDir}/logs/$${date:yyyy-MM}/log4j2-%d{-dd-MMMM-yyyy}-%i.log.gz">
<PatternLayout>
<pattern>%d{HH:mm:ss.SSS} [%t] %p %c %m%n</pattern>
</PatternLayout>
<Policies>
<OnStartupTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="10 MB"/>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
</Appenders>

<Loggers>
<Root level="DEBUG">
<AppenderRef ref="Console"/>
<AppenderRef ref="RollingFile"/>
</Root>
<Logger name="sendSMS" level="DEBUG">
<AppenderRef ref="Console"/>
<AppenderRef ref="RollingFile"/>
</Logger>
</Loggers>

</Configuration>

输出至文件,参考二

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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="100">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%style{%d{HH:mm:ss.SSS}}{black} [%style{%t}{bright,blue}] %highlight{%p} %style{%c}{bright,yellow}: %m%n%throwable"/>
</Console>

<RollingFile name="MainRollingFile"
fileName="${sys:logDir}/jjzx.log"
filePattern="${sys:logDir}/$${date:MM}/main/%d{dd}-jjzx-%i.log">
<PatternLayout charset="GBK">
<pattern>%d{HH:mm:ss.SSS} [%t] %p %c %m%n</pattern>
</PatternLayout>
<Policies>
<OnStartupTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="10 MB"/>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>

<!-- 缓存管理 -->
<RollingFile name="CacheRedisUtilsRollingFile"
fileName="${sys:logDir}/cache-redisUtils.log"
filePattern="${sys:logDir}/$${date:MM}/cache/%d{dd}-redisUtils-%i.log">
<PatternLayout charset="GBK">
<pattern>%d{HH:mm:ss.SSS} [%t] %p %c %m%n</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="10 MB"/>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>

<!-- 查询日志 -->
<RollingFile name="SearchLogScoreRollingFile" fileName="${sys:logDir}/searchLog-score.log"
filePattern="${sys:logDir}/$${date:MM}/searchLog/%d{dd}-score-%i.log">
<PatternLayout charset="GBK">
<pattern>%d{HH:mm:ss.SSS} [%t] %p %c %m%n</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="10 MB"/>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
<RollingFile name="SearchLogOtherScoreRollingFile"
fileName="${sys:logDir}/searchLog-otherScore.log"
filePattern="${sys:logDir}/$${date:MM}/searchLog/%d{dd}-otherScore-%i.log">
<PatternLayout charset="GBK">
<pattern>%d{HH:mm:ss.SSS} [%t] %p %c %m%n</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="10 MB"/>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
<RollingFile name="SearchLogVolunteerRollingFile"
fileName="${sys:logDir}/searchLog-volunteer.log"
filePattern="${sys:logDir}/$${date:MM}/searchLog/%d{dd}-volunteer-%i.log">
<PatternLayout charset="GBK">
<pattern>%d{HH:mm:ss.SSS} [%t] %p %c %m%n</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="10 MB"/>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
<RollingFile name="SearchLogAdmissionRollingFile"
fileName="${sys:logDir}/searchLog-admission.log"
filePattern="${sys:logDir}/$${date:MM}/searchLog/%d{dd}-admission-%i.log">
<PatternLayout charset="GBK">
<pattern>%d{HH:mm:ss.SSS} [%t] %p %c %m%n</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="10 MB"/>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>

<!-- 推送日志 -->
<RollingFile name="PushLogScoreRollingFile"
fileName="${sys:logDir}/pushLog-score.log"
filePattern="${sys:logDir}/$${date:MM}/pushLog/%d{dd}-score.log">
<PatternLayout charset="GBK">
<pattern>%d{HH:mm:ss.SSS} [%t] %p %c %m%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>

<!-- 后台操作日志 -->
<RollingFile name="BgRequestRollingFile"
fileName="${sys:logDir}/bg-request.log"
filePattern="${sys:logDir}/$${date:MM}/bg/%d{dd}-request.log">
<PatternLayout charset="GBK">
<pattern>%d{HH:mm:ss.SSS} [%t] %p %c %m%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
<RollingFile name="BgLoginRollingFile"
fileName="${sys:logDir}/bg-login.log"
filePattern="${sys:logDir}/$${date:MM}/bg/%d{dd}-login.log">
<PatternLayout charset="GBK">
<pattern>%d{HH:mm:ss.SSS} [%t] %p %c %m%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
<RollingFile name="BgGuanggaoRollingFile"
fileName="${sys:logDir}/bg-guanggao.log"
filePattern="${sys:logDir}/$${date:MM}/bg/%d{dd}-guanggao.log">
<PatternLayout charset="GBK">
<pattern>%d{HH:mm:ss.SSS} [%t] %p %c %m%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
<RollingFile name="BgZixunRollingFile"
fileName="${sys:logDir}/bg-zixun.log"
filePattern="${sys:logDir}/$${date:MM}/bg/%d{dd}-zixun.log">
<PatternLayout charset="GBK">
<pattern>%d{HH:mm:ss.SSS} [%t] %p %c %m%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>

</Appenders>

<Loggers>
<Root level="INFO">
<AppenderRef ref="Console"/>
<AppenderRef ref="MainRollingFile"/>
</Root>

<!-- 缓存管理 -->
<Logger name="cache.RedisUtils" level="INFO" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="CacheRedisUtilsRollingFile"/>
</Logger>

<!-- 查询日志 -->
<Logger name="searchLog.score" level="INFO" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="SearchLogScoreRollingFile"/>
</Logger>
<Logger name="searchLog.otherScore" level="INFO" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="SearchLogOtherScoreRollingFile"/>
</Logger>
<Logger name="searchLog.volunteer" level="INFO" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="SearchLogVolunteerRollingFile"/>
</Logger>
<Logger name="searchLog.admission" level="INFO" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="SearchLogAdmissionRollingFile"/>
</Logger>

<!-- 推送日志 -->
<Logger name="pushLog.score" level="INFO" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="PushLogScoreRollingFile"/>
</Logger>

<!-- 后台操作日志 -->
<Logger name="bg.Request" level="INFO" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="BgRequestRollingFile"/>
</Logger>
<Logger name="bg.Login" level="INFO" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="BgLoginRollingFile"/>
</Logger>
<Logger name="bg.Guanggao" level="INFO" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="BgGuanggaoRollingFile"/>
</Logger>
<Logger name="bg.Zixun" level="INFO" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="BgZixunRollingFile"/>
</Logger>
</Loggers>

</Configuration>