Logger 를 사용하고 싶을때, 보통 아파치에서 제공하는 log4j 라는 것을 사용하는데,
이것은 몇몇 설정을 해주어야 하기 때문에, 간단하게 자바에서 제공하는 logging 기능을
사용하여 Logger 를 만들 수 있다.
아래의 예제는 간단한 로그 기능만을 구현한 클래스 이므로, encoding 이라든지,
기타 여러가지 설정을 바꾸고 싶을때는, 좀더 customize 해야 한다.
// JRE 1.5 이상에서만 실행가능, JDK 1.5 이상에서 컴파일 가능
// Generic Programming을 사용하였음.
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
public class SimpleLogger {
public static final int LOGGER_LEVEL_SEVERE = 0;
public static final int LOGGER_LEVEL_WARNING = 1;
public static final int LOGGER_LEVEL_INFO = 2;
public static final int LOGGER_LEVEL_CONFIG = 3;
public static final int LOGGER_LEVEL_FINE = 4;
public static final int LOGGER_LEVEL_FINER = 5;
public static final int LOGGER_LEVEL_FINEST = 6;
private Logger logger;
private static final String LOGGER_NAME = "SIMPLE_LOG";
private String logDir;
private String logFileName;
private FileHandler logFileHandler;
private HashMap<Integer, Level> loggerLevel; // Logger Level 들을 가지고 있는 HashMap
public SimpleLogger(String logDir, String logFileName){
this.logDir = logDir;
this.logFileName = logFileName;
logger = Logger.getLogger(LOGGER_NAME);
loggerLevel = new HashMap<Integer, Level>();
initLogger();
}
public void info(String msg){
logger.info(msg);
}
public void log(String msg){
logger.info(msg);
}
public void log(Level level, String msg){
logger.log(level, msg);
}
// 보통 레벨은 Level object 을 만들지 않고 바로 사용자가 정의한 어떤 Integer 형 상수로
// 정의하고 싶을 때가 많다. 이렇게 하기위해서 HashMap 에 정의한 level 에 따른 Level Object
// 를 얻어와서 로거 Level을 설정해 주면 사용하기 간편하다.
public void log(int level, String msg){
logger.log(getLevel(level), msg);
}
public void initLogger(){
loggerLevel.put(new Integer(LOGGER_LEVEL_SEVERE), Level.SEVERE);
loggerLevel.put(new Integer(LOGGER_LEVEL_WARNING), Level.WARNING);
loggerLevel.put(new Integer(LOGGER_LEVEL_INFO), Level.INFO);
loggerLevel.put(new Integer(LOGGER_LEVEL_CONFIG), Level.CONFIG);
loggerLevel.put(new Integer(LOGGER_LEVEL_FINE), Level.FINE);
loggerLevel.put(new Integer(LOGGER_LEVEL_FINER), Level.FINER);
loggerLevel.put(new Integer(LOGGER_LEVEL_FINEST), Level.FINEST);
try{
// 해당 디렉토리가 존재하지 않은면 생성
boolean isDirCreated = (new File(logDir).mkdirs());
if(isDirCreated){
logger.info(logDir + " is created.");
}
logFileHandler = new FileHandler(logDir + File.separator + logFileName, true);
logger.addHandler(logFileHandler);
logger.setLevel(Level.ALL);
// SimpleFormatter를 이용하면 encoding 이라든지, 각종 설정들을 할 수 있다.
// javadoc 를 참조해서 customize 해서 사용하면 됨.
SimpleFormatter formatter = new SimpleFormatter();
logFileHandler.setFormatter(formatter);
}
catch (SecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public Level getLevel(int level){
Integer levelKey = new Integer(level);
return loggerLevel.containsKey(levelKey)? loggerLevel.get(levelKey): Level.INFO;
}
public static void main(String [] args){ // 테스트
SimpleLogger logger = new SimpleLogger("c:\\log", "simple.log");
logger.log("this is a test.");
}
}
'Programming > Java' 카테고리의 다른 글
Simple usage of javadoc (javadoc 로 문서 만들기) (0) | 2011.11.09 |
---|---|
Java File encoding 설정 (0) | 2011.11.09 |
XML parser using Java SAX library (Java SAX 이용하여 XML Parser 만들기) (0) | 2011.11.09 |
Difference between StringBuilder and StringBuffer (StringBuilder 와 StringBuffer의 차이점) (0) | 2011.11.09 |
Java Remove all white spaces in String (문자열에서 모든 white space 제거하기) (0) | 2011.11.09 |