반응형
logging
시스템 운영에 대한 기록
- 오류가 발생 했을 때 그 오류에 대한 기록을 남겨 디버깅을 용이하게 함
- 로그 파일에 기록하는 코드를 추가하여 필요한 정보가 로그로 남을 수 있도록 한다.
- 디버깅, 시스템 에러 추적, 성능, 문제점 향상들을 위해 사용
어느정도까지 로그를 남길것인지 결정
- 너무 적은 로그: 정확한 시스템의 상황을 파악하기 어려움
- 너무 많은 로그: 빈번한 file I/O의 오버헤드와 로그 파일의 백업 문제
java.util.logging
- 자바에서 기본적으로 제공되는 log package
- 파일이나 콘솔에 로그 내용을 출력할 수 있음
- jre/lib/logging.properties 파일을 편집하여 로그의 출력방식 로그 레벨을 변경 할 수 있음
- logging 패키지에서 제공하는 로그 레벨은 severe, warning, info, config, fine, finer, finest
- 오픈소스로는 log4j를 많이 사용하고 있음
MyLogger.java
package ch58;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
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() {
// TODO Auto-generated constructor stub
try {
logFile = new FileHandler(errorLog, true);
warningFile = new FileHandler(warningLog, true);
fineFile = new FileHandler(fineLog, true);
} catch (Exception e) {
// TODO: handle exception
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);
}
}
LoggerTest.java
package ch58;
public class LoggerTest {
public static void main(String[] args) {
MyLogger logger = MyLogger.getLogger();
logger.log("log test");
}
}
Student.java
package ch58;
public class Student {
private String studentName;
MyLogger myLogger = MyLogger.getLogger();
public Student(String studentName) throws StudentNameFormatException {
// TODO Auto-generated constructor stub
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;
}
}
StudentNameFormatException.java
package ch58;
public class StudentNameFormatException extends Exception {
public StudentNameFormatException(String message) {
// TODO Auto-generated constructor stub
super(message);
}
}
StudentTest.java
package ch58;
public class StudentTest {
public static void main(String[] args) throws StudentNameFormatException {
MyLogger myLogger = MyLogger.getLogger();
String name = null;
try {
Student student = new Student(name);
} catch (StudentNameFormatException e) {
// TODO: handle exception
myLogger.warning(e.getMessage());
}
try {
Student student = new Student("Edward JoonKim Test");
} catch (StudentNameFormatException e) {
// TODO: handle exception
myLogger.warning(e.getMessage());
}
Student student = new Student("James");
String sName = student.getStudentName();
}
}
반응형
'언어 > JAVA' 카테고리의 다른 글
표준 입출력 스트림 (0) | 2021.05.23 |
---|---|
자바의 입출력(I/O 스트림) 종류 설명 (0) | 2021.05.23 |
사용자 정의 예외 클래스 (0) | 2021.05.23 |
예외 처리 방법(처리하기, 미루기) 2 (0) | 2021.05.23 |
예외 처리 방법(처리하기, 미루기) (0) | 2021.05.23 |