1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# Set root logger level to WARN and append to stdout
log4j.rootLogger=INFO,stdout,R,R1
#日誌文件輸出目標,控制檯/文件
#日誌輸出方式:控制檯
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=com.youcompan.project.log4j.Log4jExPatternLayout
log4j.appender.stdout.layout.ConversionPattern=[xxxx] %d %5p %T (%c.%M:%L) - %m%n
#應用服務器日誌目錄
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=${catalina.home}/logs/ydbudget.log
log4j.appender.R.DatePattern = '.'yyyy-MM-dd'.log'
#log4j.appender.R.MaxFileSize=500KB
log4j.appender.R.layout=com.youcompan.project.log4j.Log4jExPatternLayout
log4j.appender.R.layout.ConversionPattern=[xxxx]%d%5p %T (%C.%M:%L) - %m%n
log4j.appender.R.Append=true
#應用根目錄
log4j.appender.R1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R1.File=${webApp.root}logs/ydbudget.log
log4j.appender.R1.DatePattern = '.'yyyy-MM-dd'.log'
#log4j.appender.R1.MaxFileSize=500KB
log4j.appender.R1.layout=com.youcompan.project.log4j.Log4jExPatternLayout
log4j.appender.R1.layout.ConversionPattern=[xxxx]%d%5p %T (%C.%M:%L) - %m%n
log4j.appender.R1.Append=true
|
輸出三個地方 配置基本一致, 固然相對路徑不一樣,按日滾動吧java
其中應用服務器 中${catalina.home}是tomcat系的自帶系統變量 ,無需其餘配置web
而應用根目錄中的${webApp.root} 是在web.xml中經過spring定義的spring
1
2
3
4
5
6
7
8
9
10
11
|
<
context-param
>
<
param-name
>webAppRootKey</
param-name
>
<
param-value
>webApp.root</
param-value
>
</
context-param
>
<
context-param
>
<
param-name
>log4jConfigLocation</
param-name
>
<
param-value
>classpath:log4j.properties</
param-value
>
</
context-param
>
<
listener
>
<
listener-class
>org.springframework.web.util.Log4jConfigListener</
listener-class
>
</
listener
>
|
如今來看佈局類的定義和pattern的配置,apache
Log4jExPatternLayout 這個類是繼承自 org.apache.log4j.PatternLayout ,其主要功能就是爲了讓 pattern 中的 %T 顯示 線程號,上代碼,tomcat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public
class
Log4jExPatternLayout
extends
PatternLayout {
public
Log4jExPatternLayout(String pattern){
super
(pattern);
}
public
Log4jExPatternLayout(){
super
();
}
/**
* 重寫createPatternParser方法,返回PatternParser的子類
*/
@Override
protected
PatternParser createPatternParser(String pattern) {
return
new
Log4jExPatternParser(pattern);
}
}
|
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
|
public
class
Log4jExPatternParser
extends
PatternParser {
public
Log4jExPatternParser(String pattern) {
super
(pattern);
}
/**
* 重寫finalizeConverter,對特定的佔位符進行處理,T表示線程ID佔位符
*/
@Override
protected
void
finalizeConverter(
char
c) {
if
(c ==
'T'
) {
this
.addConverter(
new
ExPatternConverter(
this
.formattingInfo));
}
else
{
super
.finalizeConverter(c);
}
}
private
static
class
ExPatternConverter
extends
PatternConverter {
public
ExPatternConverter(FormattingInfo fi) {
super
(fi);
}
/**
* 當須要顯示線程ID的時候,返回當前調用線程的ID
*/
@Override
protected
String convert(LoggingEvent event) {
return
String.valueOf(Thread.currentThread().getId());
}
}
}
|
參考文檔忘記了,這篇文章是後來整理的,感謝他們吧服務器