log4j Tricks (log4j 1.2)

1. 開啓 log4j 框架內部的日誌輸出到控制檯app

# 在 log4j.properties 中添加
log4j.debug=true # 配置 log4j 框架內部的日誌經過 System.out 輸出

經過開啓 log4j 內部日誌,能夠方便查看配置問題框架

 

n. 類做用ide

PropertyConfigurator : log4j.properties 對應的配置類spa

 

Q&A:debug

1. log4j.properties 配置了日誌輸出到控制檯和文件,結果控制檯的沒有輸出日誌

log4j.rootLogger=STDOUT,INFO,ERROR

rootLogger 配置有問題,rootLogger 值對應的第一個串表明 rootLogger 的日誌 level,應該改成:code

log4j.rootLogger=INFO,STDOUT,INFO,ERROR

對應的源碼:PropertyConfigurator#parseCategory(...)orm

 1 void parseCategory(Properties props, Logger logger, String optionKey, String loggerName, String value) {
 2 
 3     LogLog.debug("Parsing for [" + loggerName + "] with value=[" + value + "].");
 4     // We must skip over ',' but not white space
 5     StringTokenizer st = new StringTokenizer(value, ",");
 6 
 7     // If value is not in the form ", appender.." or "", then we should set
 8     // the level of the loggeregory.
 9     if (!(value.startsWith(",") || value.equals(""))) {
10 
11         // just to be on the safe side...
12         if (!st.hasMoreTokens())
13             return;
14 
15         // rootLogger 配置的第一個串爲 levelStr
16         String levelStr = st.nextToken();
17         LogLog.debug("Level token is [" + levelStr + "].");
18 
19         // If the level value is inherited, set category level value to
20         // null. We also check that the user has not specified inherited for the
21         // root category.
22         if (INHERITED.equalsIgnoreCase(levelStr) || NULL.equalsIgnoreCase(levelStr)) {
23             if (loggerName.equals(INTERNAL_ROOT_NAME)) {
24                 LogLog.warn("The root logger cannot be set to null.");
25             } else {
26                 logger.setLevel(null);
27             }
28         } else {
29             logger.setLevel(OptionConverter.toLevel(levelStr, (Level) Level.DEBUG));
30         }
31         LogLog.debug("Category " + loggerName + " set to " + logger.getLevel());
32     }
33 
34     // Begin by removing all existing appenders.
35     logger.removeAllAppenders();
36 
37     Appender appender;
38     String appenderName;
39     // rootLogger 配置的第二個串日後的串爲 appenderName 
40     while (st.hasMoreTokens()) {
41         appenderName = st.nextToken().trim();
42         if (appenderName == null || appenderName.equals(","))
43             continue;
44         LogLog.debug("Parsing appender named \"" + appenderName + "\".");
45         appender = parseAppender(props, appenderName);
46         if (appender != null) {
47             logger.addAppender(appender);
48         }
49     }
50 }
View Code
相關文章
相關標籤/搜索