java.util.logging.Logger 활용
시스템 운영에 대한 기록, 오류가 발생하였을 때 그 오류에 대한 기록을 남겨 디버깅 용이하게 함
로그 파일에 기록하는 코드를 추가하여 필요한 정보가 로그로 남을 수 있도록 한다
디버깅, 시스템 에러 추적, 성능, 문제점 향상들을 위해 사용
적당한 수의 로그를 남기는 것이 중요
자바에서 기본적으로 제공하는 logging 패키지
파일이나 콘솔에 로그 내용을 출력할 수 있음
jre/lib/logging.properties 파일을 편집하여 로그 출력방식의 로그 레벨을 변경할 수 있음
logging 패키지에서 제공하는 로그 레벨은 severe, warning, info, config, fine, finer, finest
오픈 소스로는 log4j
많이 사용, 보통 로그 만들때는 프레임웍 자주 사용
public class MyLogger{
// Singleton 패턴으로 구현
Logger logger = Logger.getLogger("mylogger");
priavet static MyLogger instance = new MyLogger();
public static final String errorLog = "log.txt";
public static final String warningLog = "warning.txt";
public static final STring fineLog = "fine.txt";
private FileHandler logFile = null;
private FileHandler warningFile = null;
private FileHandler fineFile = null;
private MyLogger(){
try{
logFile = new FileHandler(errorLog,true);
warningfile = new FileHandler(warningLog, true);
fineFile = new FileHandler(fineLog, true);
} catch (SercurityException e){
e.printStackTrace();
} catch(IOException e){
e.printStackTrace();
}
logFile.setFormatter(new SimpleFormatter());
warningFile.setFormatter(new SimpleFormatter());
fineFile.setFormatter(new SimpleFormatter());
Logger.setLevel(Level.ALL);
// 입력 레벨 부터 찍어라, Logger 레벨보다 낮으면 로거 레벨을 바탕으로 출력
fineFile.setLevel(Level.FINE);
warningFile.setLevel(Level.WARNING)
logger.addHandler(logFile);
logger.addHandler(warningFile);
logger.addHandler(fineFile);
}
public static MyLogger getLogger(){
return instance;
}
public void log(String msg){
// 일종의 정보를 주기위한 로거
logger.finest(msg);
logger.finer(msg);
logger.fine(msg);
logger.config(msg);
logger.info(msg);
logger.warning(msg);
logger.severe(msg);
}
public void fine(String msg){
logger.fine(msg);
}
public void warning(String msg){
logger.warning(msg);
}
}
public class LoggerTest {
public static void main(String[] args) {
MyLogger myLogger = MyLogger.getLogger();
myLogger.log("log test");
}
}
이거 실행 시 로그 파일이 생성 됨(fine.txt, log.txt, warning.txt)
public class StudentNameFormatException extends IllegalArgumentException{
public StudentNameFormatException(String message){
super(message);
}
}
public class Student {
private String studentName;
MyLogger myLogger = MyLogger.getLogger();
public Student(String studentName){
if(studentName == null){
throw new StudentNameFormatException("name must not be null");
}
if( studentName.split(" ").length > 3)
throw new StudentNameFormatException("이름이 너무 길어요");
this.studentName = studentName;
}
public String getStudentName() {
myLogger.fine("begin getStudentName()");
return studentName;
}
}
public class StudentTest {
public static void main(String[] args) {
MyLogger myLogger = MyLogger.getLogger();
String name = null;
try{
Student student = new Student(name);
}catch( StudentNameFormatException e ){
myLogger.warning(e.getMessage());
}
try{
Student student = new Student("Edward Jon Kim Test");
}catch ( StudentNameFormatException e){
myLogger.warning(e.getMessage());
}
Student student = new Student("James");
}
}
Exception 상황을 로그로 잘 남기도록 하자!