1. 程式人生 > >log4j不同級別日誌完全分開列印

log4j不同級別日誌完全分開列印

可以自由收藏管理個人常用網址的導航網     666導航網   

預設的log4j 列印日誌輸出的檔案中低級別會包含高級別日誌,比如定義了輸出級別為info,則日誌檔案中會包含了:info以及比info高級別的warn,error等資訊,造成檔案的冗餘,通過繼承log4j的原始類,重寫isAsSevereAsThreshold方法 只判斷級別是否相等,不判斷優先順序

程式碼如下:

  1. <code class="language-java">public class LogUtil  extends DailyRollingFileAppender {  
  2.     static {  
  3. /*這裡要注意,專案執行起來後,會自動載入src下面的log4j.properties配置檔案,不需要在程式碼裡手動引入,否則日誌資訊會重複列印兩遍,如果檔名不是log4j.properties,則需要手動指定配置檔案路徑*/  
  4.         //PropertyConfigurator.configure("log4j.properties");// :讀取使用Java的特性檔案編寫的配置檔案。  
  5.     }  
  6.     public boolean isAsSevereAsThreshold(Priority priority) {      
  7.         //只判斷是否相等,而不判斷優先順序       
  8.       return this.getThreshold().equals(priority);      
  9.    }     
  10.     public static boolean DEBUG = true;  
  11.     public static boolean DEBUG_LESSER = true;  
  12.     private static Logger logger = Logger.getLogger("");  
  13.     private static final String tag = "netty ";  
  14.     private static SimpleDateFormat sdf = new SimpleDateFormat("MM/dd HH:mm:ss", Locale.getDefault());  
  15.     //==========================5個列印級別===========================================================  
  16.         public static void logDebug(String str) {  
  17.             if (DEBUG)  
  18.                 logger.debug(tag + "#T#" + sdf.format(new Date()) + "$T$ #M#" +str + "$M$");  
  19.         }  
  20.         public  static void logInfo(String str) {  
  21.             if (DEBUG)  
  22.                 logger.info(tag + "#T#" + sdf.format(new Date()) + "$T$ #M#" +str + "$M$");  
  23.         }  
  24.         public static void logWarn(String str) {  
  25.             if (DEBUG)  
  26.                 logger.warn(tag + "#T#" + sdf.format(new Date()) + "$T$ #M#" +str + "$M$");  
  27.         }  
  28.         public static void logError(String str) {  
  29.             if (DEBUG)  
  30.                 logger.error(tag + "#T#" + sdf.format(new Date()) + "$T$ #M#" +str + "$M$");  
  31.         }  
  32.         public static void logFatal(String str) {  
  33.             if (DEBUG)  
  34.                 logger.fatal(tag + "#T#" + sdf.format(new Date()) + "$T$ #M#" +str + "$M$");  
  35.         }  
  36. }</code>  

下面是配置檔案log4j.properties

  1. log4j.rootLogger= Console,Info,Warn, Error,Fatal

  2. #Console

  3. log4j.appender.Console=org.apache.log4j.ConsoleAppender

  4. log4j.appender.Console.layout=org.apache.log4j.PatternLayout

  5. log4j.appender.Console.Threshold = OFF

  6. #Info

  7. log4j.appender.Info=com.xcinfo.cool.util.LogUtil

  8. log4j.appender.Info.File=./cold_chain_log_info.log

  9. log4j.appender.Info.layout=org.apache.log4j.PatternLayout

  10. log4j.appender.Info.Threshold = INFO

  11. log4j.appender.Info.File.DatePattern='.'yyyy-MM-dd'.log'

  12. #Warn

  13. log4j.appender.Warn=com.xcinfo.cool.util.LogUtil

  14. log4j.appender.Warn.File=./cold_chain_log_warn.log

  15. log4j.appender.Warn.layout=org.apache.log4j.PatternLayout

  16. log4j.appender.Warn.Threshold = DEBUG

  17. log4j.appender.Warn.File.DatePattern='.'yyyy-MM-dd'.log'

  18. #Error

  19. log4j.appender.Error=com.xcinfo.cool.util.LogUtil

  20. log4j.appender.Error.File=./cold_chain_log_err.log

  21. log4j.appender.Error.layout=org.apache.log4j.PatternLayout

  22. log4j.appender.Error.Threshold = ERROR

  23. log4j.appender.Error.File.DatePattern='.'yyyy-MM-dd'.log'

  24. #Fatal

  25. log4j.appender.Fatal=com.xcinfo.cool.util.LogUtil

  26. log4j.appender.Fatal.File=./cold_chain_log_fatal.log

  27. log4j.appender.Fatal.layout=org.apache.log4j.PatternLayout

  28. log4j.appender.Fatal.Threshold = FATAL

  29. log4j.appender.Fatal.File.DatePattern='.'yyyy-MM-dd'.log'

配置簡要說明: log4j.appender.test.File=./xc_app_log_error.log    "表示輸出檔案路徑" log4j.appender.RollingFile.File.DatePattern='.'yyyy-MM-dd'.log'    表示每天生成一個日誌檔案,當天的日誌檔案會儲存在xc_app_log_error.log檔案中 到了第二天,會將昨天的日誌檔案xc_app_log_error.log儲存為xc_app_log_error.'yyyy-MM-dd'.log',並將第二天的檔案儲存在新的 xc_app_log_error.log檔案中,以此類推每過一天就追加一天的日誌檔案  

log4j.appender.RollingFile.Threshold =日誌級別   分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL或者您定義的級別。Log4j建議只使用四個級別,優先順序從高到低分別是ERROR、WARN、INFO、DEBUG static Level DEBUG DEBUG Level指出細粒度資訊事件對除錯應用程式是非常有幫助的。 static Level INFO INFO level表明 訊息在粗粒度級別上突出強調應用程式的執行過程。 static Level WARN WARN level表明會出現潛在錯誤的情形。 static Level ERROR ERROR level指出雖然發生錯誤事件,但仍然不影響系統的繼續執行。 static Level FATAL FATAL level指出每個嚴重的錯誤事件將會導致應用程式的退出。 另外,還有兩個可用的特別的日誌記錄級別: (以下描述來自log4j API http://jakarta.apache.org/log4j/docs/api/index.html): static Level ALL ALL Level是最低等級的,用於開啟所有日誌記錄。 static Level OFF OFF Level是最高等級的,用於關閉所有日誌記錄。