LOG 4 Jプログラム構成ログ情報

2881 ワード


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 = "
" + ste.getClassName() + "." + ste.getMethodName() + "(" + ste.getFileName() + ":" + ste.getLineNumber() + ") "; return logInfo; } } if (logInfo.length() == 0) { logInfo = "
" + 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; }

以上のコードは、冗長な構成を回避し、異なるクラスに異なるログ出力を持たせることができます.