'Software Development/JavaSE&EE'에 해당되는 글 23건

 Exception 중에, 다른 Exception 은, throw 할 때, 해당 함수가 public void someFunction() throws XXXException 처럼, throws 를 반드시 명시해야 하지만, RuntimeException 은, 함수가 throws 를 정의하지 않아도 에러가 나지 않는다. 특수한 속성이 있어서 그런 듯 하다.
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,



1. Prologue

 JAVA 개발하면서, log4j 를 모르는 사람은 없을듯 하다. 그만큼 오래전부터 사용 해 왔고, 성능또한 검증이 되었고, 사용법도 그리 어렵지 않아서인 듯 하다. 실제로 많은 오픈소스 프레임웍이나 라이브러리에서, log4j 에 dependency 를 걸고 있는 것만 보아도 그렇다.

 사내 프레임워크의 경우, log4j 를 사용하지는 않지만, Concept 을 다소 가져다가 쓰는 부분들이 있다. 하지만 사실 설정이나 사용 편의성, 기능의 확장성 등의 측면에서, 사내 프레임웍이 조금은 나은 듯 하기도 하다. Log4J 는 Inherit 개념으로 인해 살짝 불필요한 고민을 아키텍트나 개발자가 하게 만드는 것 같다.

 뭐 아직 많이 사용해보지는 않았으니, 내가 잘 모르는 뭔가가 있을수도..

 이번 Log4J 를 분석해가면서 한가지 원칙을 정한게 있다. "책은 안본다" 라는 원칙인데, 공부하기 싫다는건 아니고, 오픈소스 라이브러리들이 대부분 보면, Help 가 빈약하다는 느낌이다. 이것저것 쓰다보면, 안그래도 좋지않은 머리가 사용법을 다 기억하고 있는것도 아니고, Help 를 봐가면서 작업해야 하는데, MSDN 처럼 정리된 Help 가 있는것도 아니라서 난감할 때가 한두번이 아니다.

 책을 보면, 참 친절하게 설명하고는 있으나, 책 보면서 하려면, 책 없으면 못한다라는 결론이 내려져서, 이번부터는 책 없이 해보려 한다. 그래서, 여기저기를 뒤져가면서 (아 왜 지들이 만들고 사용법은 신경을 안서 그랴..) 나만의 사용법 등을 정리 해 나가기로 했다.

2. 설치 및 관련 파일

 log4j 는 apache 의 logging 프로젝트로 들어가면 된다. logging.apache.org 들어가면, log4j, log4cxx, log4net 등이 있고, 현재는 log4php 가 incubation 상태이다.

  log4j 1.2 버전을 받고 (1.3은 중단됐고, 2.0은 실험용이란다), 압축을 푼다. 현재 최신 버전은 1.2.15 버전이다.
요놈을 받아서 풀면, 아래와 같은 디렉토리 나오겠다.


- contribs 에는, 개발한 애들의 이름 밑에, 갸들의 샘플 코드들이 있고 (나중에 시간나면 뭔 코든지나 좀 살펴봐야 할듯)
- examples 에는, 샘플이 있긴 한데, 정말 별 쓰잘떼기 없는 샘플들이다. 특히, 난 lf5 밑에 있는 코드들이 예시를 든 잘된 코드구나.. 생각했드니만, 죄다 log force 5 라는 로그 보여주는, 패키지 내의 툴을 띄워서 보여줄 목적으로 만든 코드들이다.
- site 는, 지들 사이트의 문서들을 offline 에서 볼수있도록 해놓은 것들이고. (introduction 과 API 만 볼만함)
- src 는 log4j 의 소스코드
- tests 는 지들의 log4j 라이브러리 테스트 코드들을 넣어놨다. 그런데, 대부분의 properties 및 XML 설정파일들이 여기에 가지별로 있다. 하지만, XML 내에 어떤 element 가 어떤것인지는 안써있다는거~

나머지 뭐 빌드하고 자시고 할 것 없이, Eclipse 에 프로젝트 만들어서 Sample 몇개 돌려보면 될것이다. 어차피 샘플로 얻어지는 것은 별로 없더라는..

이노무 Ceki Gulcu 라는 놈이, 지 책 팔아먹을라고 제대로 된 매뉴얼은 책으로 만들어놓은듯..

3. Log4J 의 핵심 개념 몇가지

(1) Logger
 

(2) Appender

(3) Layout



반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

log4j 를 분석하다가, log4j 의 lf5 의 예제에서는, properties 파일을, 패키지 내부에 넣고,
예를 들어, 소스의 패키지가 lf5.sample 일 때, "/lf5/sample/log4j_sample.properties" 로 접근이 되는데, 내가 만든 클래스 내에서는, PropertyConfigurator.configure("/simpleTest/myapp2.log4j.properties"); 하면, 계속 파일 없다고 나오길래, lf5 의 예제 코드를 보니, 이런 부분이 있었더라는..

우선, 사용하려는 파일의 위치는 아래와 같고


잘 되는 소스코드는 이렇다.. 아래의 코드에서 무식하게 그냥 PropertyConfigurator.configure("/simpleTest/myapp2.log4j.properties");  해서 될게 아니다라는걸 깨닿게 된다.

public static final String resource = "/simpleTest/myapp2.log4j.properties";

public static URL configurationFileURL = MyApp2.class.getResource(resource);
	
	public static void main(String[] args) {
		/**
		 * 아래와 같이, property 파일을 직접 명시해주거나, 아니면, 
		 * src 의 root 에, log4j.properties 이름으로 두고, Configurator 설정을 안하면
		 * 된다~!
		 */
		PropertyConfigurator.configure(configurationFileURL);

위에서 public static URL configurationFileURL = MyApp2.class.getResource(resource); 요 부분이 핵심이다.

패키지 내부에 있는 리소스를 찾아서, URL 로 리턴해주는데,
logger.debug("Config file URL : " + configurationFileURL);
logger.debug("Config file URI : " + configurationFileURL.getFile());

위 코드로 확인해보면, 이렇게 나온다.
Config file URL : file:/E:/JavaProject/webproject/log4jtest/build/classes/simpleTest/myapp2.log4j.properties
Config file URI : /E:/JavaProject/webproject/log4jtest/build/classes/simpleTest/myapp2.log4j.properties

참 좋은 Method 같네. 담부터는 잘 활용해 먹어야 겠구만.
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,