출처 : http://eclipse.new21.org/phpBB2/viewtopic.php?t=146
본론으로 들어가자.
1. log4j를 웹로직에서 쓰자.
웹로직에서의 log4j를 쓰는 방법에 대해서 많이 생각을 해봤다.
좀처럼 쉽지 않았음 T.T
원리는 간단한데 말이다.
일단 log4j의 특성을 알아야 한다.
이 log를 적기 위해 별별 opensoure를 뒤져야 했다.
그 결론을 나름대로 내려보면
1. jdk1.4의 logging 기능을 함께 쓰는방법 2. apache common의 project를 이용해서 섞어쓰는 방법 3. log4j의 특성만 이용해서 사용하는 방법 |
그럼 3번을 쓰는 방법을 알아보자.
2. 환경설정
1. C:\bea\weblogic700\common\lib 아래에 log4j.jar 를 복사해 넣는다. 2. C:\bea\user_projects\mydomain 에서 set JAVA_OPTIONS=-Dlog4j.config=log4j.xml -Dweblogic.security.SSL.trustedCAKeyStore=C:\bea2\weblogic700\server\lib\cacerts 와 같이 JAVA_OPTIONS에 추가를 한다. 3. 이로서 환경 설정은 끝이다. 참고 : 만일 log4j.config파일을 사용하려면 위의 2의 Dlog4j.config=log4j.xml 을 Dlog4j.config=log4j.config 로 수정만 하면 된다. |
log4j.xml
코드: |
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="cad" class="org.apache.log4j.RollingFileAppender"> <!--<param name="File" value="Logging4J.xml" />--> <param name="File" value="Logging4J.log" /> <param name="Append" value="true" /> <param name="MaxFileSize" value="1000"/> <param name="MaxBackupIndex" value="3"/> <!--<layout class="org.apache.log4j.xml.XMLLayout"> </layout>--> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/> </layout> </appender> <root> <priority value ="debug" /> <appender-ref ref="cad"/> </root> </log4j:configuration> |
3. 헉 정말로 저게 끝이단 말인가?
그져 코딩에(jsp, servlet, ejb 등등...) 아래의 예처럼 코딩만하면 된다.
코드: |
package org.new21.lovelazur.test; import org.apache.log4j.Logger; public class LoveLazurLoggerTest { private static Logger logger = Logger.getLogger(LoveLazurLoggerTest.class.getName()); public void logerTest() { logger.debug("test logger ... best log system log4j!!"); } } |
4. web.xml의 수정
환경 설정이 이것 뿐이라는 말은 t.t
하나 더 있기는 하다.
우선 web.xml을 열어 이렇게 수정한다.
코드: |
<?xml version="1.0" ?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> <!-- Loggin configuration --> <servlet> <servlet-name>Log4jInit</servlet-name> <servlet-class>org.new21.lovelazur.conf.Log4jInit</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> </web-app> |



이건 뭐란말인가?
이것의 정체를 알려면 이전에 log에서 DomConfigurator를 찾아보기 바란다.
이것은 properties를 메모리에 로딩해서 범용적으로 쓰기 위함이다.
이제 이것의 servlet을 보도록 하자.
4. Config용 Servlet작성
org.new21.lovelazur.conf.Log4jInit
코드: |
package org.new21.lovelazur.conf; import javax.servlet.http.HttpServlet; import org.apache.log4j.PropertyConfigurator; import org.apache.log4j.xml.DOMConfigurator; import java.text.SimpleDateFormat; import java.util.Date; /** * <p>Controls Log4j logging level. Implemented as a servlet so * that logging levels can be adjusted by redeploying the webapp. * Log file is determined by "log4j.config" set as a system * property in the server startup file.</p> * * @author Copyright (c) 2003 by BEA Systems. All Rights Reserved. */ public class Log4jInit extends HttpServlet { public void init() { int debug = 0; String value; String logFile; logFile = System.getProperty("log4j.config"); System.out.println("############### Log4J log file ##############" + logFile); value = getServletConfig().getInitParameter("debug"); try { debug = Integer.parseInt(value); } catch (Throwable t) { debug = 0; } if (debug >= 1) { SimpleDateFormat formatter = new SimpleDateFormat("MMM d, yyyy H:mm:ss a z"); Date today = new Date(); String output = "<"+formatter.format(today)+"> <Debug> <love lazur>"; System.out.println(output+" love lazur app log4j prop file: "+logFile); } if(logFile != null) { if (logFile.toString().toLowerCase().endsWith(".xml")) { System.out.println("############### Log4J DOMConfigurator configure ##############" ); DOMConfigurator.configure(logFile); } else { System.out.println("############### Log4JPropertyConfigurator configure ##############" ); PropertyConfigurator.configure(logFile); } } } } |
이것을 compile해서 WEB-INF 아래에 넣어주면 된다.





5. log확인
이것을 잘 따라했다면...아래와 같은 로그를 볼수 있다.
로그 파일 이름은 log4j.xml에 기술한 Logging4J.log 이다. 그리고 이 로그는 주기적으로 backup을 받으므로 착오없길 바란다.
2004-02-26 13:31:29,578 DEBUG [ExecuteThread: '11' for queue: 'default'] test.LoveLazurLoggerTest (LoveLazurLoggerTest.java:12) - test logger ... best log system log4j!! 2004-02-26 13:31:29,609 DEBUG [ExecuteThread: '11' for queue: 'default'] test.LoveLazurLoggerTest (LoveLazurLoggerTest.java:12) - test logger ... best log system log4j!! 2004-02-26 13:31:29,640 DEBUG [ExecuteThread: '11' for queue: 'default'] test.LoveLazurLoggerTest (LoveLazurLoggerTest.java:12) - test logger ... best log system log4j!! 2004-02-26 14:05:06,656 DEBUG [ExecuteThread: '12' for queue: 'default'] test.LoveLazurLoggerTest (LoveLazurLoggerTest.java:12) - test logger ... best log system log4j!! 2004-02-26 15:10:03,453 DEBUG [ExecuteThread: '12' for queue: 'default'] calculation.BonusCalculatorBean (BonusCalculatorBean.java:21) - <<<<<<< test EJB logger ... best log system log4j!! >>>>>>> |
LOG4J의 Weblogic에서의 설정을 마치고 사용법도 익혔다.
만일 tomcat및 다른 container에서 사용하려면 class path(tomcat의 경우는 xxx/yyy/lib 인데 기억안나지만 그곳에 log4j.jar를 넣어두면 된다.
그리고 web.xml및 Log4jInit.class 을 적절한 위치에 넣어두면 된다.
아마 다 될것이라고 믿는다.
jsp의 경우 로그 프로그램 코딩을 넣는게 부담스럽기도 하다.
이런경우 custom tag를 이용해 간단하게 작성, 사용하는게 바람직할것으로 본다.
차후 시간이 나면 jsp custom tag도 만들어 볼것이다.
'Dev... > 웹서비스' 카테고리의 다른 글
[펌] Log4j 사용법... (0) | 2005.02.13 |
---|---|
[펌] Velocity Template Engine 시작하기 (0) | 2005.02.13 |
[펌] SWT 예제들 3.0 API 추가 포함 (0) | 2005.02.13 |
[펌] iBatis SQL Maps 2.0에 대한 소개 (0) | 2005.02.13 |
[펌] 하이버네이트(Hibernate) 입문 (0) | 2005.02.13 |