日誌配置log4j 打印線程號

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());
       }
  
      }
  
  
}

參考文檔忘記了,這篇文章是後來整理的,感謝他們吧服務器

 



相關文章
相關標籤/搜索