'LOG4J'에 해당되는 글 3건

  1. 2009.05.07 log4j 보다 slf4j by 즐건세상
  2. 2008.07.08 log4j 설정 by 즐건세상
  3. 2008.07.02 ibatis 로그 레벨 조정 by 즐건세상

log4j 보다 slf4j

IT/java 2009. 5. 7. 13:50
http://www.slf4j.org/manual.html
Posted by 즐건세상
l

log4j 설정

IT/java 2008. 7. 8. 23:49
서버 프로그래밍을 하면서 에러를 찾기 위해서 이클립스에서 디버깅을 하면서 찾기에는 어려움이 많다. 여러건의

 request 가 동시에 발생할 경우에 에러가 발생하게 되는 경우에는 이클립스 디버깅 화면에서 버그를 찾기는 쉽지

가 않다. 이럴 때는 가능한 많은 로그를 남겨서 디버깅을 해보는게 더 효과적일 수 있다.

log4j 매뉴얼만 가지고는 log4j를 제대로 사용하기에는 좀 어려운 부분이 없지 않아 있는거 같다. 나도 처음에는

로그 파일 하나에 모든 로그를 남기고 로그 레벨 조정하는것도 별로 관심이 없었다.

그런데 실제 프로젝트를 하다보면 업무별로 로그를 남겨야 하는 경우도 많고 심한 경우에는 사용자 별로 로그를 남

겨야 하는 경우도 발생할 수 있다. log4j에서는 이 모든것을 지원해준다. 그러나 log4j/doc에 있는 문서만 바서는 이

런 기능들을 활용하기에는 어려울거 같다. 문서에는 Logger barlogger = Logger.getLogger("com.foo.Bar"); 와 같은 문장들이 많다. 아니면 Logger.getLogger(Bar.class); 이런 문장들이 많다. 이렇게 사용할 경우에는 업무별로 로그를 남기기는 어렵다. 물론 패키지별로 독립성이 띄어날 경우에는 문제가 없지만, 그런 경우는 거의 없을것이다. 그럼, 어떻게 하느냐 하면 만약 로그인과 관련된 업무라면 Logger logger = Logger.getLogger("Login");  과 같은 형태로 쓸 수도 있다. 꼭 클래스의 이름일 필요는 없다는 것이다. 물론 이렇게 하기 위해서는 log4j 프로퍼티 파일을 이에 맞게 기술되어 있어야 한다. 프로퍼티 파일을 예를 들어보면,

log4j.rootCategory=DEBUG, console, totallog

log4j.logger.login_log=DEBUG, login

log4j.appender.totallog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.totallog.File=${logging.path}/logs/total.log
log4j.appender.totallog.DatePattern='.'yyyy-MM-dd
log4j.appender.totallog.layout=org.apache.log4j.PatternLayout
log4j.appender.totallog.layout.ConversionPattern=%d{HH:mm:ss} %5p (%C{2} - %M:%L) - %m%n

log4j.appender.login=org.apache.log4j.DailyRollingFileAppender
log4j.appender.login.File=${logging.path}/logs/login.log
log4j.appender.login.DatePattern='.'yyyy-MM-dd
log4j.appender.login.layout=org.apache.log4j.PatternLayout
log4j.appender.login.layout.ConversionPattern=%d{HH:mm:ss} %5p (%C{2} - %M:%L) - %m%n

이런 식의 프로퍼티 파일을 기술한다면 Logger logger = Logger.getLogger("login"); 와 같이 사용할 수가 있다.
프로퍼티 파일을 보면 rootcategory 에 totallog가 존재하고 그 자식의 로그로 login 로그가 존재하게 된다.
totallog 에는 getLogger() 해서 사용하는 모든 로그가 쌓이게 되고, login.log 파일에는 getLogger("login") 사용한 로그만 남게 된다.
log를 남길 파일 위치를 기술하는 log4j.appender.login.File 값으로 {logging.path} 가 있는데 이 값은 System.getProperty("loggin.path") 해서 가지고 오는 값이다. 사용자가 System.setProperty("logging.path","c:\abc") 이런식으로 설정해 주면 된다는 것이다. 이렇게 하는 이유는 유연성을 높이기 위해서인데 절대 경로를 지정할 경우 디플로이 되는 서버가 바뀐다거나 했을 경우 프로퍼티 파일을 수정하지 않더라도 에러없이 돌아가게 하기 위해서이다. 주로 톰캣이나 다른 웹 서버에 디플로이 할때 contextroot path를 코드로 얻을 수가 있다. 이 값을 System 프로퍼티에 할당해 주게 되면 프로젝트를 새로 디플로이하더라도 프로퍼티 파일을 수정하지 않아도 된다.
로그를 남기는 패턴은 http://www.vipan.com/htdocs/log4jhelp.html 여기로 가면 잘 설명되어 있으므로 참고하기 바란다.



Posted by 즐건세상
l
ibatis를 사용하다 보면 로그가 많이 보이는데 안보이게 하고 싶으면
로그레벨을 다음과 같이 조정하면 된다.

log4j 설정파일이 프로퍼티 파일로 되어 있는 경우는 아래와 같이..
log4j.logger.com.ibatis=INFO
log4j.logger.java.sql=INFO

xml로 되어 있는 경우는
   <category name="com.ibatis">
<priority value="debug" />
</category>

<category name="java.sql">
<priority value="debug" />
</category>

Posted by 즐건세상
l