Java

2024.05.21 Java 유용한 클래스 로그와 파일 저장

정훈5 2024. 5. 21. 16:29
매번 로깅 코드를 작성하는 것은 불편할 수 있습니다.
그래서 로그를 편리하게 사용할 수 있도록 클래스를 설계하고,
영구적으로 로그를 저장할 수 있는 파일 저장 기능을 포함하는 코드를 작성해 봅시다.

 

프로젝트 생성

my-logger/
├── src/
│   └── com/
│       └── tenco/
│           ├── ConsoleLogger.java
│           ├── FileLogger.java
│           └── MyLogger.java
└── build/

 

package com.tenco;

public class ConsoleLogger {
	
	public static void log(String message) {
		System.out.println(message);
	}
}

 

package com.tenco;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FileLogger {
	
	private String fileName;
	private SimpleDateFormat dataFormat;
	
	public FileLogger(String fileName) {
		this.fileName = fileName;
		// 현재시간 2024-05-21-16:10:50
		this.dataFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	} // 생성자
	
	public void log(String message) {
		try(
				BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, true));
				) {
			// 현재 시간
			String now = dataFormat.format(new Date());
			writer.write(now + " :: " +message);
			writer.newLine();
			writer.flush();
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	public void readLogs() {
		try(
				BufferedReader reader = new BufferedReader(new FileReader(fileName))
				) {
			String line;
			while( (line = reader.readLine()) != null ) {
				System.out.println(line);
			}
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
} // end of class

 

package com.tenco;

public class MyLogger {
	private static ConsoleLogger consoleLogger = new ConsoleLogger();
	private static FileLogger fileLogger = new FileLogger("mLogger.txt");
	
	// 콘솔창에 로그를 찍는 기능
	public static void logToConsole(String message) {
		consoleLogger.log(message);
	}
	
	//  콘솔창 + 파일에 저장하는 기능
	public static void logToFile(String message) {
		logToConsole(message);
		fileLogger.log(message);
	}
	
} // end of class

 

package com.tenco;

public class MainTest {

	public static void main(String[] args) {
		
		MyLogger.logToConsole("실행 1");
		System.out.println("--------");
		
		MyLogger.logToFile("예외 확인 null Pointer");
		System.out.println("-----------------");
		
		MyLogger.logToFile("예외 확인 형 변환 오류 발생");

	} // end of main

} // end of class