일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ncs
- 패캠챌린지
- linux
- 패스트캠퍼스
- String
- js
- 리눅스
- 디자인패턴
- 재택근무
- 한번에끝내는JavaSpring웹개발마스터초격차패키지Online
- 패스트캠퍼스후기
- 국비
- DB
- 디자인
- DesignPattern
- javabasic
- java기초
- 데이터베이스
- 자바예제
- 자바
- 스프링
- 직장인자기계발
- 자바기본
- 직장인인강
- 자바기초
- java
- Spring
- 한번에끝내는JavaSpring웹개발마스터초격차패키지Online강의
- 웹
- 자바연습문제
- Today
- Total
FIF's 코딩팩토리
패스트캠퍼스 챌린지 47일차 본문
오류의 로그를 남기기 - java.util.logging.Logger를 활용해보자.
logging이란?
시스템 운영에 대한 기록이다.
오류가 발생 했을 때 그 오류에 대한 기록을 남겨 디버깅을 용이하게 한다.
로그 파일에 기록하는 코드를 추가하여 필요한 정보가 로그로 남을 수 있도록 한다.
디버깅, 시스템 에러 추적, 성능, 문제점 향상들을 위해 사용한다.
어느정도까지 로그를 남길 것인가? 너무 많은 로그 : 빈번한 file I/O의 오버헤드와 로그 파일의 백업 문제등이 있다.
너무 적은 로그 : 정확한 시스템의 상황을 파악하기 어려움이 있다.
그렇게 때문에! java.util.logging 를 사용한다.
자바에서 기본적으로 제공되는 log package 이다.
파일이나 콘솔에 로그 내용을 출력할 수 있다.
jre/lib/logging.properties 파일을 편집하여 로그의 출력방식 로그 레벨을 변경 할 수 있다.
logging 패키지에서 제공하는 로그 레벨은 severe, warning, info, config, fine, finer, finest 이다.
오픈소스로는 log4j를 많이 사용하고 있다.
Logger 만들기
시나리오
학생의 이름에 오류가 있는 경우 예외 처리를 하고 예외 상황을 로그로 남긴다.
학생의 이름은 null 이거나 중간에 space가 3개 이상인 경우 오류가 발생한다.
학생 정보 시스템에 로그를 기록하도록 한다.
구현하기로그를 남기기 위한 FileHandler를 생성한다.
Logger에 생성된 addHandler()메서드로 FileHandler를 추가한다.
FileHandler의 level을 지정하고Logger 인스턴스를 생성한다.
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);
}
}
LoggerTest.java
public class LoggerTest {
public static void main(String[] args) {
MyLogger myLogger = MyLogger.getLogger();
myLogger.log("test");
}
}
StudentNameFormatException.java
public class StudentNameFormatException extends IllegalArgumentException{
public StudentNameFormatException(String message){
super(message);
}
}
Student.java
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;
}
}
StudentTest.java
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");
}
}
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'패스트캠퍼스 챌린지' 카테고리의 다른 글
패스트캠퍼스 챌린지 49일차 (0) | 2022.03.13 |
---|---|
패스트캠퍼스 챌린지 48일차 (0) | 2022.03.12 |
패스트캠퍼스 챌린지 46일차 (0) | 2022.03.10 |
패스트캠퍼스 챌린지 45일차 (0) | 2022.03.09 |
패스트캠퍼스 챌린지 44일차 (0) | 2022.03.08 |