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;
}
以上のコードは、冗長な構成を回避し、異なるクラスに異なるログ出力を持たせることができます.