Log4J日誌配置詳解和自定義log4j日誌級別及輸出日誌到不同檔案實現方法
阿新 • • 發佈:2019-01-06
測試:package com.jo.work.log4j; import java.util.Enumeration; import org.apache.log4j.Appender; import org.apache.log4j.FileAppender; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.PatternLayout; import org.apache.log4j.RollingFileAppender; import org.apache.log4j.net.SyslogAppender; /** * 自定義日誌級別和 */ public class CustomLog { private static CustomLog log = new CustomLog(); private CustomLog(){} public static CustomLog getInstance() { return log; } /** * 繼承Level自定義級別 */ private static class CustomLogLevel extends Level{ private static final long serialVersionUID = 1L; protected CustomLogLevel(int level, String levelStr, int syslogEquivalent) { super(level, levelStr, syslogEquivalent); } } /** * 自定義級別名稱,以及級別範圍 */ private static final Level CustomerLevel = new CustomLogLevel(20050, "CUSTOMER", SyslogAppender.LOG_LOCAL0); /** * 生成日誌物件 * @param filePath 日誌輸出路徑 * @param fileName 日誌檔名 * @param conversionPattern log的輸出形式 * @param flag true:在已存在log檔案後面追加 false:新log覆蓋以前的log */ public Logger createLogger(String filePath, String fileName, String conversionPattern, boolean flag){ // 生成新的Logger // 如果已經有了一個Logger例項則返回 Logger logger = Logger.getLogger(fileName); // 清空Appender。特別是不想使用現存例項時一定要初期化 logger.removeAllAppenders(); // 設計定Logger級別。 logger.setLevel(Level.DEBUG); // 設定是否繼承父Logger。 // 預設為true。繼承root輸出。 // 設定false後將不輸出root。 logger.setAdditivity(false); // 生成新的Appender FileAppender appender = new RollingFileAppender(); // log的輸出形式 PatternLayout layout = new PatternLayout(); layout.setConversionPattern(conversionPattern+"%m%n"); appender.setLayout(layout); // log輸出路徑 appender.setFile(filePath+ fileName + ".log"); // log的文字碼 appender.setEncoding("UTF-8"); // true:在已存在log檔案後面追加 false:新log覆蓋以前的log appender.setAppend(flag); // 適用當前配置 appender.activateOptions(); // 將新的Appender加到Logger中 logger.addAppender(appender); return logger; } /** * 使用自定義日誌列印logger中的log方法 * @param logger 日誌物件 * @param objLogInfo:日誌內容 */ public void customLog(Logger logger, Object objLogInfo){ logger.log(CustomerLevel, objLogInfo); } /** * 關閉自定義log * @param logger 日誌物件 */ @SuppressWarnings("unchecked") public void closeCustomLog(Logger logger){ for (Enumeration<Appender> appenders=logger.getAllAppenders(); appenders.hasMoreElements();) { Appender appender=appenders.nextElement(); appender.close(); } } }