본문 바로가기

Java/Java 유용한 클래스 - 3

로그와 파일 저장 - 17

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

 

 

프로젝트 생성

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

 

package com.tenco;

public class ConsoleLogger {
	
	public 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 dateFormat;

	public FileLogger(String fileName) {
		this.fileName = fileName;
		this.dateFormat = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
	}

	public void log(String message) {

		try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, true))) {
			// 현재 시간
			String now = dateFormat.format(new Date());
			writer.write(now + " :: " + message);
			writer.newLine();
			writer.flush();
		} catch (Exception e) {
			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) {
			e.printStackTrace();
		}
	}
}

 

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);
	}

}