-
[LOG] Logger 2개 사용하기JAVA 2015. 11. 17. 10:34
이것은 기본 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개의 로거를 사용하는 법을 설명하겠다.
일단 코드를 보면..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(); )
이렇게 각 로거별로 설정을 달리해서 내가 원하는 정보별로 파일을 분리해서 로그 관리를 할 수가 있다.'JAVA' 카테고리의 다른 글
REST API 호출 (0) 2015.12.02 경로 구하기 (0) 2015.11.30 [Exception] printStackTrace String값으로 읽기 (0) 2015.11.17 [LOG] Log4j 로그파일 분리 (1) 2015.11.13 [XML] XML 파싱.. (0) 2015.10.29