«Tistory 블로그에서 작성했던 글»
이것은 기본 JAVA Project 기준으로 설명합니다.
지난번에 log4j파일분리 세팅 을 했으니 이번엔 그 사용법을 알아보자.
요구사항은 일반 디버깅 로그와 작업수행에 대해 직관적으로 볼 수 있는 로그파일 2개를 생성해 달라는 것이었다.
기본 자바 프로젝트다보니 log4j 설정파일 경로 같은 것을 XML등을 이용해서 셋팅하는게 불가능하고 기본 JAVA 클래스에서 처리를 해야 했다.
그리고 이 프로젝트 자체가 jar파일로 만들어 배치작업을 돌려야 하기 때문에 해당 프로젝트내에서 properties를 컨트롤할 수 있어야 했다.
그래도 일단 패키지형태는 제대로 맞추자 생각해서 했던 세팅..
이렇게 패키지를 구성하고 작업을 시작했다.
config
에는 메시징 처리를 위한 msg.properties파일과 logger설정을 위한 log4j.properties파일을 넣었다.
lib
폴더에는 필요한 라이브러리 들을 넣었다. (log4j-1.2.17.jar)
그리고 controller에는 해당 프로그램을 실행시킬 수 있는 컨트롤러 클래스를 넣었다.
그럼 이제 기존 세팅 해두었던 log4j.properties를 이용해서 2개의 로거를 사용하는 법을 설명하겠다.
일단 코드를 보면..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package com.chaedae.controller;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class BatchController {
// Logger Setting
public static Logger debug_logger;
public static Logger error_logger;
// Properties Setting
public static Properties prop;
// Properties Path
public static String logPath = "com/chaedae/config/log4j.properties";
public static String msgPath = "/com/chaedae/config/msg.properties";
// Properties load
public void setProperties() {
PropertyConfigurator.configure(this.getClass().getResource("/").getPath() + logPath);
// Logger Set
debug_logger = Logger.getLogger("변수명1");
error_logger = Logger.getLogger("변수명2");
// Message Set
String file_path = this.getClass().getResource("/").getPath() + msgPath;
FileInputStream fis = null;
prop = new Properties();
// get properties content
try {
fis = new FileInputStream(new File(file_path));
prop.load(new InputStreamReader(fis));
} catch(IOException e) {
error_logger.error("Properties Load Fail");
} finally {
try {
fis.close();
} catch (IOException e) {
}
}
}
public static void main(String[] args) throws Exception {
BatchController bc = new BatchController();
bc.setProperties();
debug_logger.debug("Debug Start");
error_logger.error("Error Start");
}
}
프로그램이 최초 실행될 때 main메소드에서 setProperties() 라는 메소드를 호출해서 properties파일들을 읽어
Properties(message)와 logger들을 셋팅해주었다.
PropertyConfigurator
는 Log4j에서 제공하는 메소드로 properties 설정을 하는데 이용한다.
this.getClass().getResource("/").getPath()
의 경우는 해당 프로젝트의 최상위 경로를 가져오는 것이고,
나는 최상위폴더에서 내가 설정해놓은 config까지의 경로를 string으로 세팅해두고 로드해왔다.
내 경우엔 자바의 패키지설정에 맞게 셋팅을 하긴 했지만 보통은 아예 최상단에 properties들을 놓고 사용하는 경우도 많다.
그럴땐 각 path들에서 패키지경로를 빼고 위와 같이 사용하면 된다.
debug_logger = logger.getLogger("변수명1")
는 전에 log4j.properties에 설정해두었던 변수의 정보를 가져오는것이고,
사용하는 방법은 debug_logger.레벨(“메시지”) 이다.
단순하게 하드코딩으로 메시지를 남길수도 있지만 만약 Exception에러가 난 부분에서 로그를 남길 경우는
Exception의 PrintStackTrace를 이용 해서 로그를 남긴다면 디버그 작업이 더 수월해 질 것이다.
메시징 처리를 위한 properties로드의 경우 FileInputStream을 이용해서 내부의 내용을 미리 선언해둔 Properties에 셋팅해서 사용한다.
(ex> prop.get("메시징내용").toString(); )
이렇게 각 로거별로 설정을 달리해서 내가 원하는 정보별로 파일을 분리해서 로그 관리를 할 수가 있다.