[Java] Logging

SeongWon Oh·2021년 8월 21일
0

Java

목록 보기
35/39
post-thumbnail

Logging이란?

  • 시스템 운영에 대한 기록으로 오류가 발생했을 때 그 오류에 대하 기록을 남겨 디버깅을 할 떄 사용할 수 있다.

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

  • 디버깅, 시스템 에러 추적, 성능과 문제점 향상 등을 위해 log를 사용한다.

  • 로그는 너무 적게 남기면 정확한 시스템의 상황을 파악하기 어렵게되며 반대로 너무 많은 로그를 남기면 빈번한 file I/O의 overhead와 로그파일의 백업 문제 등이 발생한다. 그래서 적당한 수의 로그를 남기도록 해야한다.


java.util.logging

  • java.util.logging는 자바에서 기본적으로 제공하는 log package로 파일이나 콘솔 로그에 내용을 출력할 수 있게 해준다.

  • 로그에는 레벨이 있으며 logging 패키지에서 제공하는 로그 레벨은 severe, warning, info, config, fine, finer, finest이 있다.

  • jre/lib/logging.properties 파일을 편집하여 로그의 출력방식 로그 레벨을 변경 할 수 있다.

    위의 jre/lib/logging.properties 파일의 java.util.logging.ConsoleHandler.level의 값을 변경하여 출력 log레벨을 변경할 수 있다.


👨🏻‍💻 Example Code

MyLogger.java

package ch11;

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 {
	
	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); //true를 하면 뒤에 이어서 log를 찍는다.
				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); // 모든 level을 다 찍겠다.
			fineFile.setLevel(Level.FINE); // fine level부터 찍겠다.
			warningFile.setLevel(Level.WARNING); // warning level부터 찍겠다.
			
			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 ch11;

public class LoggerTest {

	public static void main(String[] args) {

		MyLogger myLogger = MyLogger.getLogger();
		
		myLogger.log("test");
	}

}

Result

txt파일에 저장된 log결과
다음 결과를 통해 log출력 범위를 정하는 것에 따라 출력 범위가 달라지는 것을 알 수 있다.

Console에 나오는 log결과



Reference

profile
블로그 이전했습니다. -> https://seongwon.dev/

0개의 댓글