public class Log4jUtil { private static Properties prop = new Properties(); static { try { prop.load(Log4jUtil.class.getResourceAsStream("/log4j.mapping")); } catch (Exception e) { e.printStackTrace(); } } /*** * @param className * this.getClass().getName() * @return */ public static String getLog4jInfo(Class<?> classinf) { String logInfo = ""; StackTraceElement[] stack = (new Throwable()).getStackTrace(); for (int i = 0; i < stack.length; i++) { StackTraceElement ste = stack[i]; if (classinf.getName().equals(ste.getClassName())) { logInfo = "\n" + ste.getClassName() + "." + ste.getMethodName() + "(" + ste.getFileName() + ":" + ste.getLineNumber() + ") "; return logInfo; } } if (logInfo.length() == 0) { logInfo = "\n" + classinf.toString(); } return logInfo; } public static Logger getLogger(Class<?> className) { Logger loggerFile = null; // 获取该类对应的日志文件名,未找到时,使用fileLog String name = className.getName(); String value = ""; while (name.contains(".")) { value = (String) prop.get(name); if (value != null && value.length() > 0) { break; } name = name.substring(0, name.lastIndexOf(".")); } if (value != null && value.length() > 0) { loggerFile = LogManager.exists(name); if (loggerFile == null) { loggerFile = LogManager.getLogger(name); } FileAppender fileAppender = (FileAppender) loggerFile.getAppender(name); if (fileAppender == null) { // 默认日志文件输出appender FileAppender appender = (FileAppender) LogManager.getLoggerRepository().getRootLogger() .getAppender("fileLog"); // 新建Appender fileAppender = new DailyRollingFileAppender(); fileAppender.setLayout(appender.getLayout()); fileAppender.addFilter(appender.getFilter()); fileAppender.setEncoding(appender.getEncoding()); fileAppender.setFile(appender.getFile().substring(0, appender.getFile().lastIndexOf("/") + 1) + value); fileAppender.setName(name); fileAppender.activateOptions(); loggerFile.addAppender(fileAppender); loggerFile.setLevel(LogManager.getLoggerRepository().getRootLogger().getLevel()); } } else { loggerFile = LogManager.getLoggerRepository().getRootLogger(); } return loggerFile; }
以上代码可以避免冗余的配置,使不同的类具有不同的日志输出。