log4j不同級別日誌完全分開列印
可以自由收藏管理個人常用網址的導航網 666導航網
預設的log4j 列印日誌輸出的檔案中低級別會包含高級別日誌,比如定義了輸出級別為info,則日誌檔案中會包含了:info以及比info高級別的warn,error等資訊,造成檔案的冗餘,通過繼承log4j的原始類,重寫isAsSevereAsThreshold方法 只判斷級別是否相等,不判斷優先順序
程式碼如下:
- <code class="language-java">public class LogUtil extends DailyRollingFileAppender {
- static {
- /*這裡要注意,專案執行起來後,會自動載入src下面的log4j.properties配置檔案,不需要在程式碼裡手動引入,否則日誌資訊會重複列印兩遍,如果檔名不是log4j.properties,則需要手動指定配置檔案路徑*/
- //PropertyConfigurator.configure("log4j.properties");// :讀取使用Java的特性檔案編寫的配置檔案。
- }
- public boolean isAsSevereAsThreshold(Priority priority) {
- //只判斷是否相等,而不判斷優先順序
- return this.getThreshold().equals(priority);
- }
- public static boolean DEBUG = true;
- public static boolean DEBUG_LESSER = true;
- private static Logger logger = Logger.getLogger("");
- private static final String tag = "netty ";
- private static SimpleDateFormat sdf = new SimpleDateFormat("MM/dd HH:mm:ss", Locale.getDefault());
- //==========================5個列印級別===========================================================
- public static void logDebug(String str) {
- if (DEBUG)
- logger.debug(tag + "#T#" + sdf.format(new Date()) + "$T$ #M#" +str + "$M$");
- }
- public static void logInfo(String str) {
- if (DEBUG)
- logger.info(tag + "#T#" + sdf.format(new Date()) + "$T$ #M#" +str + "$M$");
- }
- public static void logWarn(String str) {
- if (DEBUG)
- logger.warn(tag + "#T#" + sdf.format(new Date()) + "$T$ #M#" +str + "$M$");
- }
- public static void logError(String str) {
- if (DEBUG)
- logger.error(tag + "#T#" + sdf.format(new Date()) + "$T$ #M#" +str + "$M$");
- }
- public static void logFatal(String str) {
- if (DEBUG)
- logger.fatal(tag + "#T#" + sdf.format(new Date()) + "$T$ #M#" +str + "$M$");
- }
- }</code>
下面是配置檔案log4j.properties
-
log4j.rootLogger= Console,Info,Warn, Error,Fatal
-
#Console
-
log4j.appender.Console=org.apache.log4j.ConsoleAppender
-
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
-
log4j.appender.Console.Threshold = OFF
-
#Info
-
log4j.appender.Info=com.xcinfo.cool.util.LogUtil
-
log4j.appender.Info.File=./cold_chain_log_info.log
-
log4j.appender.Info.layout=org.apache.log4j.PatternLayout
-
log4j.appender.Info.Threshold = INFO
-
log4j.appender.Info.File.DatePattern='.'yyyy-MM-dd'.log'
-
#Warn
-
log4j.appender.Warn=com.xcinfo.cool.util.LogUtil
-
log4j.appender.Warn.File=./cold_chain_log_warn.log
-
log4j.appender.Warn.layout=org.apache.log4j.PatternLayout
-
log4j.appender.Warn.Threshold = DEBUG
-
log4j.appender.Warn.File.DatePattern='.'yyyy-MM-dd'.log'
-
#Error
-
log4j.appender.Error=com.xcinfo.cool.util.LogUtil
-
log4j.appender.Error.File=./cold_chain_log_err.log
-
log4j.appender.Error.layout=org.apache.log4j.PatternLayout
-
log4j.appender.Error.Threshold = ERROR
-
log4j.appender.Error.File.DatePattern='.'yyyy-MM-dd'.log'
-
#Fatal
-
log4j.appender.Fatal=com.xcinfo.cool.util.LogUtil
-
log4j.appender.Fatal.File=./cold_chain_log_fatal.log
-
log4j.appender.Fatal.layout=org.apache.log4j.PatternLayout
-
log4j.appender.Fatal.Threshold = FATAL
-
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是最高等級的,用於關閉所有日誌記錄。