/*******************************************************************************
* Copyright (c) 2013 hangum.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v2.1
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* Contributors:
* hangum - initial API and implementation
******************************************************************************/
package com.hangum.tadpole.commons.libs.core.logs;
import org.apache.log4j.Appender;
import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.RollingFileAppender;
import org.eclipse.core.runtime.Platform;
import com.hangum.tadpole.commons.libs.core.define.PublicTadpoleDefine;
/**
* log file의 환경을 설정합니다.
*
* @author hangum
*
*/
public class LogConfiguration {
String filePattern = "%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n";
String defaultPattern = "%d %-5p - %C{1} : %M %m %n";
public static Logger logger = Logger.getRootLogger();
private static LogConfiguration logConfig;
RollingFileAppender fileAppender = null;
Appender consoleAppender = null;
Level level = Level.DEBUG;
String isDevelopment = "";
private LogConfiguration(){}
public static LogConfiguration getInstance() {
if( logConfig == null) {
logConfig = new LogConfiguration();
try { logConfig.init();}catch(Exception e){}
}
return logConfig;
}
public void init() throws Exception {
fileAppender = new RollingFileAppender(new PatternLayout(filePattern), PublicTadpoleDefine.DEFAULT_LOG_FILE, true);
fileAppender.setMaxBackupIndex(10);
fileAppender.setMaxFileSize("10MB");
consoleAppender = new ConsoleAppender(new PatternLayout(defaultPattern) );
if(isDebugMode()) this.level = Level.DEBUG;
else this.level = Level.INFO;
// System.out.println("###################### log4j log level is " + this.level.toString());
logger = Logger.getRootLogger();
logger.setLevel(this.level);
logger.addAppender(fileAppender);
logger.addAppender(consoleAppender);
// 특정 package 만 로그를 조절.
// logger.getLoggerRepository().getLogger("com.ibatis").setLevel(Level.WARN);
logger.getLoggerRepository().getLogger("java.sql.ResultSet").setLevel(Level.WARN);
}
public void closeAppend() {
if(consoleAppender != null) consoleAppender.close();
}
public RollingFileAppender getFileAppender() {
return fileAppender;
}
public void setFileAppender(RollingFileAppender fileAppender) {
this.fileAppender = fileAppender;
}
public void setLevel(String level) {
this.level = Level.toLevel(level);
logger.setLevel(this.level);
}
@SuppressWarnings("unchecked")
public static Logger getLogger(final Class cls) {
return Logger.getLogger(cls);
}
public String getIsDevelopment() {
return isDevelopment;
}
public void setIsDevelopment(String isDevelopment) {
this.isDevelopment = isDevelopment;
}
/**
* check debug mode
*/
public static boolean getSQLDebugMode() {
return checkString("-sqlLogLevel");
}
/**
* check debug mode
*/
public static boolean isDebugMode() {
return checkString("-debuglog");
}
/**
* runtime시에 argument가 있는지 검사합니다.
*
* @param checkString
* @return
*/
private static boolean checkString(String checkString) {
String[] applicationArgs = Platform.getApplicationArgs();
for (String string : applicationArgs) {
if( string.equalsIgnoreCase(checkString) ) return true;
}
return false;
}
}