시스템 운영에 대한 기록
파일이나 콘솔에 로그 내용을 출력
log package
jre/lib/logging.properties
파일을 편집하여logging
패키지에서 제공하는 로그 레벨 이란?
severe(가장 높은 레벨)
warning
info
config
fine
finer
finest(가장 낮은 레벨)
낮은 레벨→ 높은 레벨 순으로 log가 찍힘
log4j
를 많이 사용하고 있음INFO
< 경고 FINE
< 심각 WARNING
logger.setLevel(Level.INFO);
fineFile.setLevel(Level.FINE);
warningFile.setLevel(Level.WARNING);
프로젝트 선택 + F5
⇒ 로그 파일 자동 생성MyLogger myLogger = MyLogger.getLogger();
myLogger.log("log test");
warning
레벨이 fine
보다 높기때문에 warning
이 나중에 출력이클립스 자동 설치
아래 파일을 이클립스로 꺼내보기
INFO
로 되어있으므로, 콘솔에 정보부터 찍힌다
위 빨간 표시 부분을 java.util.logging.ConsoleHandler.level = FINE
으로 변경
MyLogger.java
에서 logger.setLevel(Level.ALL);
로 변경하면? FINE부터 찍힌다MyLogger.java
public class MyLogger {
Logger logger = Logger.getLogger("mylogger");
private 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 (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
logFile.setFormatter(new SimpleFormatter());
warningFile.setFormatter(new SimpleFormatter());
fineFile.setFormatter(new SimpleFormatter());
logger.setLevel(Level.ALL);
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);
}
}
null
이거나 중간에 space
가 3개 이상인 경우 오류 발생FileHandler
생성FileHandler
의 level을 지정addHandler()
메서드로 FileHandler
를 추가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) { // 스페이스 3개이상
throw new StudentNameFormatException("이름이 너무 길어요");
}
this.studentName = studentName;
}
public String getStudentName() {
myLogger.fine("begin getStudentName()");
return studentName;
}
}
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("yeppi Lee Kim Test");
} catch (StudentNameFormatException e) {
myLogger.warning(e.getMessage());
}
Student student = new Student("yeppi");
String sName = student.getStudentName();
WARNING
은 FINE
보다 높은 레벨이기 때문에WARNING
이상의 레벨만 찍고, 낮은 레벨인 FINE
은 찍히지 않음