[JAVA] 오류의 로그 남기기

WOOK JONG KIM·2022년 10월 15일
0

패캠_java&Spring

목록 보기
23/103
post-thumbnail

logging

  • java.util.logging.Logger 활용

  • 시스템 운영에 대한 기록, 오류가 발생하였을 때 그 오류에 대한 기록을 남겨 디버깅 용이하게 함

  • 로그 파일에 기록하는 코드를 추가하여 필요한 정보가 로그로 남을 수 있도록 한다

  • 디버깅, 시스템 에러 추적, 성능, 문제점 향상들을 위해 사용

적당한 수의 로그를 남기는 것이 중요

java.util.logging

  • 자바에서 기본적으로 제공하는 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 상황을 로그로 잘 남기도록 하자!

profile
Journey for Backend Developer

0개의 댓글