본문 바로가기
Java

로그와 파일 저장

by 개발자공부 2024. 5. 24.

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

 

프로젝트 생성

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("yyyy-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);
	}
}

'Java' 카테고리의 다른 글

고수준 스트림(Data/Object Stream)  (0) 2024.05.24
사용자모드와 커널모드  (0) 2024.05.24
Map 인터페이스  (0) 2024.05.24
문자 기반 스트림 - 파일 입출력/Copy/ZIP  (1) 2024.05.21
바이트 기반 - 파일 입출력/Copy  (0) 2024.05.20