Java

로그 남기기

yanJuicy 2024. 8. 26. 00:57
반응형

logging

시스템 운영에 대한 기록을 남긴다

오류가 발생했을 때 그 오류에 대한 기록을 남겨 디버깅을 용이하게 한다

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

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

어느정도로 로그를 남겨야 하나

  • 너무 적은 로그: 정확한 시스템의 상황을 파악하기 어려움
  • 너무 많은 로그: 빈번한 file I/O의 오버헤드와 로그 파일의 백업 문제가 있을 수 있다

java.util.logging

자바에서 기본적으로 제공하는 log package다

파일이나 콘솔에 로그 내용을 출력할 수 있다

logging.properties 파일을 편집하여 로그 레벨을 변경할 수 있다

로그 레벨은 다음과 같다

  • severe
  • warning
  • info
  • config
  • fine
  • finer
  • finest

Logger 예제

Logger 인스턴스를 생성한다

로그를 남기기 위해 FileHandler를 생성한다

FileHandler의 로그 레벨을 따로 지정하고

Logger에 생성된 addHandler() 메소드를 통해 FileHandler를 추가한다

import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

public class MyLogger {

    public static final String errorLog = "log.txt";
    public static final String warningLog = "warning.txt";
    public static final String fineLog = "fine.txt";

    private static MyLogger instance = new MyLogger();

    private Logger logger = Logger.getLogger("MyLogger");
    private FileHandler logFile = null;
    private FileHandler warningFile = null;
    private FileHandler fineFile = null;

    private MyLogger() {

        try {
            logFile = new FileHandler(errorLog, true);
            warningFile = new FileHandler(errorLog, true);
            fineFile = new FileHandler(errorLog, true);
        } catch (IOException e) {
            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 find(String msg) {
        logger.finer(msg);
    }

    public void warning(String msg) {
        logger.warning(msg);
    }

}
반응형

'Java' 카테고리의 다른 글

IO Stream  (0) 2024.09.05
wait(), notify()를 활용한 동기화  (0) 2024.08.29
사용자 정의 예외 클래스  (0) 2024.08.25
예외 처리하기와 미루기  (0) 2024.08.24
예외 처리  (0) 2024.08.23