'JAVA/LOG4J'에 해당되는 글 5건

  1. 2013.04.20 :: cafe24 log4j 설정방법.
  2. 2010.12.03 :: Log4J 설정방법 및 웹로직에서 사용방법
  3. 2009.05.17 :: log4j.properties 사용 방법
  4. 2009.05.07 :: Log4J 레이아웃
  5. 2009.05.07 :: Log4J 사용하기
JAVA/LOG4J 2013. 4. 20. 20:05

cafe24는 크론탭을 지원해주지 않는다.

해당 방법이 많다고는 하지만 실질적으로 안된다.



log4j.rootLogger = DEBUG, stdout, rolling


log4j.appender.stdout = org.apache.log4j.ConsoleAppender

log4j.appender.console.Threshold =INFO

log4j.appender.stdout.layout = org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=[%5p] [%d][%t] %F.%M()-[%L Line] %m%n


log4j.appender.dailyfile.Threshold = DEBUG

log4j.appender.dailyfile = org.apache.log4j.DailyRollingFileAppender

# 로그가 쌓일 위치 적는다.

log4j.appender.rolling.File = /home/hosting_users/cafe24 계정/www/WEB-INF/logs/logfile.log

log4j.appender.dailyfile.layout = org.apache.log4j.PatternLayout

log4j.appender.dailyfile.layout.ConversionPattern=[%5p] [%d][%t] %F.%M()-[%L Line] %m%n


log4j.appender.rolling = org.apache.log4j.DailyRollingFileAppender

# 로그가 쌓일 위치 적는다.

log4j.appender.rolling.File = /home/hosting_users/cafe24 계정/www/WEB-INF/logs/logfile.log

log4j.appender.rolling.Append = true

log4j.appender.rolling.DatePattern = '.'yyyy-MM-dd

log4j.appender.rolling.layout = org.apache.log4j.PatternLayout

log4j.appender.rolling.layout.ConversionPattern=[%5p] [%d][%t] %F.%M()-[%L Line] %m%n


log4j.logger.org.mybatis=DEBUG

log4j.logger.org.apache=DEBUG

log4j.logger.java.sql=DEBUG

log4j.logger.scan하는패키지=DEBUG



posted by 나는너의힘
:
JAVA/LOG4J 2010. 12. 3. 14:44

웹로직에서는 자체 Log4J 가 있기 때문에 별도 설정이 필요하다
override 하면 될것을...-_-;;

org.apache.log4j.PropertyConfigurator.configure(logPath);  이것으로 하단에 참조...



http://payoff.tistory.com/27

http://blog.naver.com/dalbong97/130021029647

1. log4j란?

 

log4j는 프로그래머가 로그문의 출력을 다양한 대상으로 할 수 있도록 도와주는 도구이다.
애플리케이션에 문제가 생겼을 때, 로깅을 활성화하면 문제의 위치를 찾을 수 있으므로 도움이 된다.
log4j를 사용하면 애플리케이션의 실행코드를 수정하지 않고 런타임에 로깅의 활성화를 할 수 있다.
log4j 패키지는 성능상의 높은 비용을 들이지 않으면서도 배포코드에 로그문장을 남겨놓을 수 있도록 디자인되었다.
그러므로 로깅의 속도(정확히 말하자면 로깅을 하지 않을 때의 속도)가 중요하게 다루어졌다.
동시에 로그 결과는 짧은 시간에 감당하기 어렵게 될만큼 커질 수 있다.
log4j의 독특한 특징 중 하나는 계층적 로거라는 개념이다.
로거를 사용하면, 어떤 로그문이 출력되게 할 지 임의의 단위로 조정할 수 있다.

 

 

 

2. log4j 구성

 

- Logger(Category)
로깅 메세지를 Appender에 전달합니다.

- Appender
전달된 로깅 메세지를 파일에다 기록할 것인지, 콘솔에 출력할 것인지 아니면 DB에 저장할 것인지 매개체 역활을 합니다.

- Layout
Appender가 어디에 출력할 것인지 결정했다면 어떤 형식으로 출력할 것이지 출력 layout을 결졍합니다.

 

 

 

3. log4j 로깅 레벨

 

로깅의 우선 순위에 따른 로깅 레벨이다.

FATAL > ERROR > WRN > INFO > DEBUG

 

① FATAL : 가장 크리티컬한 에러가 일어 났을 때 사용합니다.
② ERROR : 일반 에러가 일어 났을 때 사용합니다.
③ WARN : 에러는 아니지만 주의할 필요가 있을 때 사용합니다.
④ INFO : 일반 정보를 나타낼 때 사용합니다.
⑤ DEBUG : 일반 정보를 상세히 나타낼 때 사용합니다.

 

만약 현재 요청한 로깅의 우선순위가 카테고리의 우선순위와 같거나 높으면

그 로깅 요청이 가능하다고 말한다.

그렇지 않을 경우 그 요청은 불가능하다고 한다.

다음은 로깅 요청의 가능/불가능 여부가 어떻게 처리되는 지를 보여주는 예이다.

// 이름이 "com.foo"인 카테고리 인스턴스를 구한다.
Category cat = Category.getInstance("com.foo");

// 카테고리의 우선순위를 설정한다.
cat.setPriority(Priority.INFO);

// WARN >= INFO 이기 때문에, 이 요청은 가능하다.
cat.warn("Low fuel level.");

// DEBUG < INFO 이기 때문에, 이 요청은 불가능하다.
cat.debug("Starting search for nearest gas station.");

// 이름이 "com.foo.Bar"인 카테고리의 인스턴스를 생성한다.
// 이 카테고리는 이름이 "com.foo"인 카테고리를 상속 받는다.
// 따라서 이 카테고리 인스턴스는 INFO 우선순위를 갖는다.
Category barcat = Category.getInstance("com.foo.Bar");

// INFO >= INFO 이므로, 이 요청은 가능하다.
barcat.info("Located nearest gas station.");

// DEBUG < INFO 이므로, 이 요청은 불가능하다.
barcat.debug("Exiting gas station search");

 

 

 

4. log4j 설정

 

log4j 설정은 프로그램 내에서 할 수 있지만 설정파일을 사용함으로서 좀더 유연하게 log4j환경을 만들 수 있습니다.

 

프로그램에서 설정

<%@ page contentType="text/html;charset=MS949"
 import="org.apache.log4j.*,java.io.* "
%>

<%!
 static Logger logger = Logger.getLogger("log4j.jsp");
%>

<%
 String layout = "%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n";
 String logfilename = "DailyLog.log";
 String datePattern = ".yyyy-MM-dd ";

 PatternLayout patternlayout = new PatternLayout(layout);
 DailyRollingFileAppender appender = new DailyRollingFileAppender(patternlayout, logfilename, datePattern);
 logger.addAppender(appender);
 logger.setLevel(Level.INFO);
 logger.fatal("fatal!!");
%>


property 파일에 설정

설정 파일의 위치를 별도로 지정하지 않으려면, log4j.properties를 만들어 /WEB-INF/classes 밑에 놓으세요.

* log4j.properties 파일은 /WEB-INF/classes/ 하위에 있어야 자동으로 load 됨.

 

 

log4j.rootLogger=INFO, stdout, rolling

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n

log4j.appender.rolling=org.apache.log4j.DailyRollingFileAppender

log4j.appender.rolling.File=output.log

log4j.appender.rolling.Append=true

log4j.appender.rolling.MaxFileSize=500KB

log4j.appender.rolling.DatePattern='.'yyyy-MM-dd

log4j.appender.rolling.layout=org.apache.log4j.PatternLayout

log4j.appender.rolling.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n

 

#최상위 카테고리에 INFO로 레벨 설정 및 appender로 stdout, rolling을 정의
log4j.rootLogger=INFO, stdout, rolling

#stdout 어펜더는 콘솔에 뿌리겠다는 정의
log4j.appender.stdout=org.apache.log4j.ConsoleAppender

#stdout 어펜더는 patternlayout을 사용하겠다는 정의

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#페턴은 다음과 같이 포맷팅 하겠다는 것을 정의

log4j.appender.stdout.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n

 

#역시나 rolling 어펜더는 파일로 처리한다라고 정의
log4j.appender.rolling=org.apache.log4j.DailyRollingFileAppender

#로그 파일 이름은 output.log
log4j.appender.rolling.File=output.log

#true면 톰캣을 내렸다 올려도 파일이 리셋되지 않습니다.
log4j.appender.rolling.Append=true

#파일 최대 사이즈는 500KB로 설정
log4j.appender.rolling.MaxFileSize=500KB

#파일 포맷은 output.log.2005-03-10 으로 관리하겠다고 정의
log4j.appender.rolling.DatePattern='.'yyyy-MM-dd

#역시나 rolling 어펜더는 패턴 레이아웃을 사용하겠다고 정의
log4j.appender.rolling.layout=org.apache.log4j.PatternLayout

#rolling 어펜더는 패턴 레이아웃 포맷
log4j.appender.rolling.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n

 

특정 위치의 설정파일을 지정하는 방법

1. WAS 기동 옵션으로

-Dlog4j.configuration=file:D:\StandardPrj\StandardProject\WebContents\WEB-INF\classes\log4j.properties

2. web.xml 파일에 설정

 <context-param>
  <param-name>log4jConfigLocation</param-name>
  <param-value>/WEB-INF/log4j.properties</param-value>
 </context-param>

3. 클래스에서 직접 로드

org.apache.log4j.PropertyConfigurator.configure(logPath);

 

VIII. 설정 포맷

 

로그파일명 포맷 (DatePattern)
로그파일명 포맷입니다. 날짜, 시간 및 분단위로까지 로그 파일을 분리할 수 있습니다.

형식 설명
'.'yyyy-MM 매달 첫번째날에 로그파일을 변경합니다
'.'yyyy-ww 매주의 시작시 로그파일을 변경합니다.
'.'yyyy-MM-dd 매일 자정에 로그파일을 변경합니다.
'.'yyyy-MM-dd-a 자정과 정오에 로그파일을 변경합니다.
'.'yyyy-MM-dd-HH 매 시간의 시작마다 로그파일을 변경합니다.
'.'yyyy-MM-dd-HH-mm 매분마다 로그파일을 변경합니다.



PatternLayout 포맷
로그자체를 어떤 포맷으로 남길지 결정합니다.
layout에는 HTMLLayout, PatternLayout, SimpleLayout, XMLLayout등이 있으며 PatternLayout이 일반적으로 가장 많이 쓰입니다.

 

형식 설명
%p debug, info, warn, error, fatal 등의 priority 가 출력된다.
%m 로그내용이 출력됩니다
%d 로깅 이벤트가 발생한 시간을 기록합니다.
포맷은 %d{HH:mm:ss, SSS}, %d{yyyy MMM dd HH:mm:ss, SSS}같은 형태로 사용하며 SimpleDateFormat에 따른 포맷팅을 하면 된다
%t 로그이벤트가 발생된 쓰레드의 이름을 출력합니다.
%% % 표시를 출력하기 위해 사용한다.
%n 플랫폼 종속적인 개행문자가 출력된다. \r\n 또는 \n 일것이다.
%c 카테고리를 표시합니다
예) 카테고리가 a.b.c 처럼 되어있다면 %c{2}는 b.c가 출력됩니다.
%C 클래스명을 포시합니다.
예) 클래스구조가 org.apache.xyz.SomeClass 처럼 되어있다면 %C{2}는 xyz.SomeClass 가 출력됩니다
%F 로깅이 발생한 프로그램 파일명을 나타냅니다.
%l 로깅이 발생한 caller의 정보를 나타냅니다
%L 로깅이 발생한 caller의 라인수를 나타냅니다
%M 로깅이 발생한 method 이름을 나타냅니다.
%r 어플리케이션 시작 이후 부터 로깅이 발생한 시점의 시간(milliseconds)
%x 로깅이 발생한 thread와 관련된 NDC(nested diagnostic context)를 출력합니다.
%X 로깅이 발생한 thread와 관련된 MDC(mapped diagnostic context)를 출력합니다.

 

예시) (같은 색끼리 보시면 됩니다)

위의 test.jsp를 다음 포맷으로 출력해본다면

[%c] [%C] [%d] [%F] [%l] [%L] [%m] [%M] [%n] [%p] [%r] [%t] [%x] [%X]는 다음과 같다

[test.jsp] [org.apache.jsp.test_jsp] [2005-03-10 12:37:23,561] [test_jsp.java] [org.apache.jsp.test_jsp._jspService(test_jsp.java:64)] [64] [fatal!!] [_jspService] [개행] [FATAL] [765567] [http-8080-Processor25] [] []

 

=============================================

본문서는 자유롭게 배포/복사 할수 있지만

이문서의 저자에 대한 언급을 삭제하시면 안됩니다

저자 : GoodBug (unicorn@jakartaproject.com)

최초 : http://www.jakartaproject.com 

=============================================

 

log4j를 적용한 로깅 예제

// 로거 임포트하기
import org.apache.log4j.Logger;

public class ClassName {
    /** Log4J 로거 얻기 */
    private Logger log = Logger.getLogger(ClassName.class);

    public void method() {

        if (log.isDebugEnabled()) {
            log.debug("디버깅용 메시지");
        }
        log.info("정보를 남기기위한 메시지");
       
        try {
            // 어쩌구 저쩌구 실행...
        } catch (Exception ex) {
            // 로그에 예외 메시지도 함께 남기기
            log.error("예외가 발생했어요~~", ex);
        }
    }
}

 

--------------------------------------------------------------------------------
프로바이더 mailto: madvirus@madvirus.net:
현재 티페이지 글로벌(주)의 기술연구소에 있으며,

'JSP 웹 어플리케이션 개발(가메출판사)'을 이동훈씨와 함께 저술한 바 있다.
--------------------------------------------------------------------------------
관련자료
예제 소스 코드
관련링크
Log4j 프로젝트 홈페이지
http://jakarta.apache.org/log4j/index.html
Sun의 로깅 API 규약
http://java.sun.com/aboutJava/communityprocess/jsr/jsr_047_log.html

posted by 나는너의힘
:
JAVA/LOG4J 2009. 5. 17. 23:43
log Level 정의

 FATAL : 가장 크리티컬한 에러가 일어 났을 때 사용합니다.
 ERROR : 일반 에러가 일어 났을 때 사용합니다.
 WARN : 에러는 아니지만 주의할 필요가 있을 때 사용합니다.
 INFO : 일반 정보를 나타낼 때 사용합니다.
 DEBUG : 일반 정보를 상세히 나타낼 때 사용합니다.

ConversionPattern 사용 방법

 %p  debug, info, warn, error, fatal 등의 priority 가 출력된다.
 %m  로그내용이 출력됩니다
 %d  로깅 이벤트가 발생한 시간을 기록합니다.
   포맷은 %d{HH:mm:ss, SSS}, %d{yyyy MMM dd HH:mm:ss, SSS}같은 형태로 사용하며 SimpleDateFormat에 따른 포맷팅을 하면 된다
 %t  로그이벤트가 발생된 쓰레드의 이름을 출력합니다.
 %%  % 표시를 출력하기 위해 사용한다.
 %n  플랫폼 종속적인 개행문자가 출력된다. rn 또는 n 일것이다.
 %c  카테고리를 표시합니다
   예) 카테고리가 a.b.c 처럼 되어있다면 %c{2}는 b.c가 출력됩니다.
 %C  클래스명을 포시합니다.
   예)클래스구조가 org.apache.xyz.SomeClass 처럼 되어있다면 %C{2}는 xyz.SomeClass 가 출력됩니다
 %F  로깅이 발생한 프로그램 파일명을 나타냅니다.
 %l  로깅이 발생한 caller의 정보를 나타냅니다
 %L  로깅이 발생한 caller의 라인수를 나타냅니다
 %M  로깅이 발생한 method 이름을 나타냅니다.
 %r  어플리케이션 시작 이후 부터 로깅이 발생한 시점의 시간(milliseconds)
 %x  로깅이 발생한 thread와 관련된 NDC(nested diagnostic context)를 출력합니다.
 %X  로깅이 발생한 thread와 관련된 MDC(mapped diagnostic context)를 출력합니다.

log4j.properties 파일 사용 예

log4j.rootLogger=INFO, stdout, rolling

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[COTAMOT] %5p,[%d],[%t],(%F:%L),%m%n
log4j.appender.stdout.target=System.err

#rolling 어펜더는 파일로 처리한다라고 정의
 log4j.appender.rolling=org.apache.log4j.DailyRollingFileAppender
#로그 파일 이름은 output.log
 log4j.appender.rolling.File=output.log
#true면 WAS를 내렸다 올려도 파일이 리셋되지 않습니다.
 log4j.appender.rolling.Append=true
#파일 최대 사이즈는 500KB로 설정
 log4j.appender.rolling.DatePattern='.'yyyy-MM-dd
#rolling 어펜더는 패턴 레이아웃을 사용하겠다고 정의
 log4j.appender.rolling.layout=org.apache.log4j.PatternLayout
#rolling 어펜더는 패턴 레이아웃 포맷
 log4j.appender.rolling.layout.ConversionPattern=[COTAMOT] %5p,[%d],[%t],(%F:%L),%m%n
posted by 나는너의힘
:
JAVA/LOG4J 2009. 5. 7. 16:20

Log4J는 다음과 같은 레이아웃을 제공한다.

SimpleLayout
PatternLayout
HTMLLayout
XMLLayout

SimpleLayout은 다음과 같은 포맷으로 고정되어 있다.

레벨 - 메시지

PatternLayout은 C의 printf()처럼 포맷 설정에 대한 자유도가 크다.

HTMLLayout은 HTML 테이블을 포맷으로 한다.

XMLLayout은 XML 문서를 포맷으로 한다.

Reference:
http://www.allapplabs.com/log4j/log4j_layouts.htm

posted by 나는너의힘
:
JAVA/LOG4J 2009. 5. 7. 16:19

System.out.println()을 사용하면 되는데 굳이 logger를 사용할 필요가 있을까?

logger를 사용하면, 다음과 같은 장점들이 있다.

- 로그 레벨별로 logging 여부를 결정할 수 있다.
- 로그를 콘솔뿐만 아니라 파일 등에 쓸 수 있다.
- 레벨이나 appender 설정을 파일에서 할 수 있다.

가장 보편적으로 사용되는 Apache Log4J를 사용해보자.

우선 log4j.properties 파일을 다음과 같이 작성한다.

log4j.rootLogger=ALL, console, another_appender

log4j.appender.console=org.apache.log4j.ConsoleAppender

log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d [%c:%p] - %m%n

log4j.appender.another_appender=org.apache.log4j.RollingFileAppender
log4j.appender.another_appender.File=log/example.log

log4j.appender.another_appender.MaxFileSize=100KB
# Keep one backup file
log4j.appender.another_appender.MaxBackupIndex=1

log4j.appender.another_appender.layout=org.apache.log4j.PatternLayout
log4j.appender.another_appender.layout.ConversionPattern=%d [%c:%p] - %m%n

log4j.properties 파일을 클래스 패스에 포함시켜야만 Log4J가 찾을 수 있다.

이클립스를 사용한다면, properties 폴더에 log4j.properties 파일을 넣고,

Build Path -> Use as Source Folder를 선택한다.

다음으로 Log4J를 사용하는 클래스를 작성한다.

package com.izeye.log4jexample;

import org.apache.log4j.Logger;

public class Log4JExample {
 
 private static final Logger logger = Logger.getLogger(Log4JExample.class);
 private static final Logger anotherLogger = Logger.getLogger("another");
 
 public static void main(String[] args) {
  String message = "TEST MESSAGE";
  while (true) {
   logger.debug(message);
   logger.info(message);
   logger.warn(message);
   logger.error(message);
   logger.fatal(message);
   
   anotherLogger.debug(message);
   anotherLogger.info(message);
   anotherLogger.warn(message);
   anotherLogger.error(message);
   anotherLogger.fatal(message);
   
   try {
    Thread.sleep(10000);
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
 }
 
}

위 클래스를 실행하면, 콘솔의 결과는 다음과 같다.

2009-02-04 19:26:58,375 [com.izeye.log4jexample.Log4JExample:DEBUG] - TEST MESSAGE
2009-02-04 19:26:58,390 [com.izeye.log4jexample.Log4JExample:INFO] - TEST MESSAGE
2009-02-04 19:26:58,390 [com.izeye.log4jexample.Log4JExample:WARN] - TEST MESSAGE
2009-02-04 19:26:58,390 [com.izeye.log4jexample.Log4JExample:ERROR] - TEST MESSAGE
2009-02-04 19:26:58,390 [com.izeye.log4jexample.Log4JExample:FATAL] - TEST MESSAGE
2009-02-04 19:26:58,390 [another:DEBUG] - TEST MESSAGE
2009-02-04 19:26:58,390 [another:INFO] - TEST MESSAGE
2009-02-04 19:26:58,390 [another:WARN] - TEST MESSAGE
2009-02-04 19:26:58,390 [another:ERROR] - TEST MESSAGE
2009-02-04 19:26:58,390 [another:FATAL] - TEST MESSAGE
2009-02-04 19:26:58,375 [com.izeye.log4jexample.Log4JExample:DEBUG] - TEST MESSAGE
2009-02-04 19:26:58,390 [com.izeye.log4jexample.Log4JExample:INFO] - TEST MESSAGE
2009-02-04 19:26:58,390 [com.izeye.log4jexample.Log4JExample:WARN] - TEST MESSAGE
2009-02-04 19:26:58,390 [com.izeye.log4jexample.Log4JExample:ERROR] - TEST MESSAGE
2009-02-04 19:26:58,390 [com.izeye.log4jexample.Log4JExample:FATAL] - TEST MESSAGE
2009-02-04 19:26:58,390 [another:DEBUG] - TEST MESSAGE
2009-02-04 19:26:58,390 [another:INFO] - TEST MESSAGE
2009-02-04 19:26:58,390 [another:WARN] - TEST MESSAGE
2009-02-04 19:26:58,390 [another:ERROR] - TEST MESSAGE
2009-02-04 19:26:58,390 [another:FATAL] - TEST MESSAGE
......

log/example.log의 내용도 위와 동일하다.

log4j.rootLogger는 모든 logger의 부모 logger이다.

따라서 등록된 모든 logger가 이 logger의 설정에 영향을 받는다.

com.izeye.log4jexample.Log4JExample 클래스 logger는

WARN 이상의 메시지만 콘솔로 출력하고,

'another' logger는 ERROR 이상의 메시지만

log/example.log 파일로 출력하도록 하기 위해서 다음과 같이 수정한다.

#log4j.rootLogger=ALL, console, another_appender

log4j.logger.com.izeye.log4jexample.Log4JExample=WARN, console

log4j.logger.another=ERROR, another_appender

posted by 나는너의힘
: