如何實現(xiàn)按需要,使某個功能的日志單獨輸出到指定的日志文件呢? 其實只要在現(xiàn)有的log4j基礎(chǔ)上稍加配置即可實現(xiàn)這一功能。 1、常用配置如下: #Level log4j.rootLogger = debug,CON,F,E ###ConsoleAppender### log4j.appender.CON = org.apache.log4j.ConsoleAppender log4j.appender.CON.layout = org.apache.log4j.PatternLayout log4j.appender.CON.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %5p %c{5}:%L - %m%n ###DailyRollingFileAppender### log4j.appender.F = org.apache.log4j.DailyRollingFileAppender log4j.appender.F.File = /export/Logs/all.log log4j.appender.F.DatePattern = '.'yyyy-MM-dd log4j.appender.F.Append = true log4j.appender.F.layout = org.apache.log4j.PatternLayout log4j.appender.F.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %5p %c{5}:%L - %m%n ###DailyRollingFileAppender### log4j.appender.E = org.apache.log4j.DailyRollingFileAppender log4j.appender.E.File = /export/Logs/error.log log4j.appender.E.DatePattern = '.'yyyy-MM-dd log4j.appender.E.Append = true log4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayout log4j.appender.E.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %5p %c{5}:%L - %m%n 2、如果需要把job的日志輸出到指定的文件中,只要追加如下內(nèi)容即可, log4j.logger.job=INFO,job log4j.additivity.job = false #該配置就是讓job的日志只輸出到自己指定的日志文件中 log4j.appender.job = org.apache.log4j.DailyRollingFileAppender log4j.appender.job.File = /export/Logs/job.log log4j.appender.job.DatePattern = '.'yyyy-MM-dd log4j.appender.job.Append = true log4j.appender.job.layout = org.apache.log4j.PatternLayout log4j.appender.job.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %5p %c{5}:%L - %m%n 還有一個問題,就是自定義的日志默認是同時輸出到log4j.rootLogger所配置的日志中的,所以job不要出現(xiàn)在 log4j.rootLogger = debug,CON,F,E中,否則其他的日志內(nèi)容也會輸出到該job的日志中 3、java代碼如下: public class ClearRubbishFileRunJob { [color=darkred]private Logger logger = LoggerFactory.getLogger("job");[/color] @Autowired private SqlSessionTemplate session; public void work() throws Exception { logger.warn("--ClearRubbishFileRunJob開始執(zhí)行--"); // 1、刪除3天前的臨時文件 try { SimpleDateFormat sp =new SimpleDateFormat("yyyyMMdd"); Calendar s = Calendar.getInstance(); s.add(Calendar.DATE, -3); Date d2 = s.getTime(); String bef2Date = sp.format(d2); // 臨時文件目錄 String filePath = FilePathConstant.ROOT_PATH; File fileDir = new File(filePath); if (fileDir.exists() && fileDir.isDirectory()) { for (File fd : fileDir.listFiles()) { String dirName = fd.getName(); if (bef2Date.compareTo(dirName) >= 0) { FileUtil.deleteFileAndChildren(fd); } } } } catch (Exception e) { logger.error("刪除臨時文件出現(xiàn)異常,信息如下:" + e.getMessage()); e.printStackTrace(); } logger.warn("--ClearRubbishFileRunJob執(zhí)行結(jié)束--"); } } 工具類: /** * 文件操作工具類 * * @date 20150205 * */ public class FileUtil implements Serializable { private static final long serialVersionUID = 1L; private FileUtil() { } /** * 刪除文件,單個文件。如果是文件夾并且包含子文件的情況下刪除失敗。需調(diào)用deleteFileAndChildren(File file) * * @date 20150205 * */ public static void deleteFile(File file) { if (file == null) { return; } if (file.exists()) { file.delete(); } } /** * 刪除文件及其所有子文件 * * @date 20150205 * */ public static void deleteFileAndChildren(File file) { if (file == null) { return; } // 判斷文件是否存在 if (file.exists()) { // 判斷是不是文件夾 if (file.isDirectory()) { File[] children = file.listFiles(); if (children != null) { for (File child : children) { deleteFileAndChildren(child); } } file.delete(); } else { // 非文件夾刪除 file.delete(); } } } /** * 文件拷貝 * */ public static void copy(File srcFile, File dstFile) throws Exception { if (srcFile == null || dstFile == null) { return; } if (!srcFile.exists()) { return; } dstFile.getParentFile().mkdirs(); InputStream in = new FileInputStream(srcFile); OutputStream out = new FileOutputStream(dstFile); byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } in.close(); out.close(); |
|