-

Log4J LEVEL

Log4J는 다음의 LEVEL을 갖는다.
Log4J의 LEVEL을 설정할때 아래의 순위에 따라 노출 범위가 결정된다.

ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF
오른쪽으로 갈수록 로그 출력이 위험 수위가 높은것만 출력 된다고 볼 수 있다.

Logger Output Hierarchy
원문링크 : http://supportweb.cs.bham.ac.uk/documentation/tutorials/docsystem/build/tutorials/log4j/log4j.html

OFF

The OFF has the highest possible rank and is intended to turn off logging.
로깅 해제.

ALL
The ALL has the lowest possible rank and is intended to turn on all logging.
모든 로깅.

TRACE
The TRACE Level designates finer-grained informational events than the DEBUG
세밀

DEBUG
The DEBUG Level designates fine-grained informational events that are most useful to debug an application.
디버깅.

INFO
The INFO level designates informational messages that highlight the progress of the application at coarse-grained level.
강조 정보.

WARN
The WARN level designates potentially harmful situations.
경고.

ERROR
The ERROR level designates error events that might still allow the application to continue running.
오류.

FATAL
The FATAL level designates very severe error events that will presumably lead the application to abort.
심각한 오류.


properties 설정

로그 설정파일 처리방법.

  1. #최상위 카테고리를 INFO 레벨로 설정
  2. log4j.rootCategory=INFO, stdout, rolling, mail
  3. #stdout는 ConsoleAppender(콘솔)에 출력
  4. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  5. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  6. log4j.appender.stdout.layout.ConversionPattern=[%d{yy/MM/dd}]%-5p %c{2}.%M (%F:%L) %m%n
  7. #rolling는 DailyRollingFileAppender(파일)에 출력
  8. log4j.appender.rolling=org.apache.log4j.DailyRollingFileAppender
  9. log4j.appender.rolling.File=D:/output.log
  10. log4j.appender.rolling.Append=true
  11. log4j.appender.rolling.DatePattern='.'yy-MM-dd
  12. log4j.appender.rolling.layout=org.apache.log4j.PatternLayout
  13. log4j.appender.rolling.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss.SSS}]%-5p %c{2}(%13F:%L) [%t] %3x - %m%n
  14. #mail는 SMTPAppender(SMTP 메일)에 출력
  15. log4j.appender.mail=org.apache.log4j.net.SMTPAppender
  16. log4j.appender.mail.BufferSize=512
  17. log4j.appender.mail.SMTPHost=SMTP호스트
  18. log4j.appender.mail.SMTPUsername=아이디
  19. log4j.appender.mail.SMTPPassword=비밀번호
  20. log4j.appender.mail.TimeFrame=30
  21. log4j.appender.mail.MaxEMails=10
  22. log4j.appender.mail.From=보내는사람 메일주소
  23. log4j.appender.mail.To=받는사람 메일주소
  24. log4j.appender.mail.Subject=메일 제목
  25. log4j.appender.mail.layout=org.apache.log4j.PatternLayout
  26. log4j.appender.mail.layout.ConversionPattern=%d{ISO8601} %5p [%t] (%F:%L) - %m%n



출력 표현식의 정의

%m: 로그 내용 출력
%p: debug, info, warn, error, fatal 등의 priority 출력
%r: 어플이 시작 후 이벤트가 발생하는 시점까지의 경과시간 밀리세컨드로 출력
%c: package 출력
%c{n}: n(숫자) 만큼의 package를 가장 하단 부터 역으로 출력
        예) %c{2} 일때 a.b.c 는 b.c 로 출력된다.
%n: 개행문자 출력. 플렛폼에 따라 \r\n 또는 \n 출력.
%d: 이벤트 발생 날짜 출력 ( 프로그램의 실행속도를 느리게 한다.)
        예) %d{HH:mm:ss} 또는 %d{dd MMMM yyyy HH:mm:ss}
%C: 호출자의 클래스명 출력
        예) %C{2} 일때 a.b.c.TestClass 는 c.TestClass 로 출력된다.
%M: method 이름.
%F: 프로그램 파일명.
%l: caller의 정보
%L: caller의 라인수
%x: thread와 관련된 NDC(nested diagnostic context) 
%X: thread와 관련된 MDC(mapped diagnostic context) 
%%: % 표시를 출력  
%t: 쓰레드 이름



ex) [%c] [%C] [%d] [%F] [%l] [%L] [%m] [%M] [%n] [%p] [%r] [%t]

[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] 

원문 : http://zzanggoo.tistory.com/4



Eclipse 콘솔창에서 소스코드 호출 방법. 

log4j.appender.stdout.layout.ConversionPattern=[%d{yy/MM/dd}]%-5p %c.%M(%F:%L) %m%n 

파랑으로 처리되어 있는 부분을 그래도 써줘야 한다.
eclipse 콘솔창에서는 package 명 + Method 명 ( 파일명 : 라인번호 ) 형식으로 이루어진 문장을 통하여 파일을 찾아간다.
  

다운로드 및 사용

Log4J 사이트 http://logging.apache.org/
log4j 사이트 : http://logging.apache.org/log4j/2.x/


다운로드 log4j 1.2.15(zip)

작업 Project의 src에 log4j.properties 파일을 위치한다.
web project에서의 위치는 class 파일이 위치하는 class 파일의 Root Directory로 {webRoot}/WEB-INF/classes/ 이다.
일반 Java Project에서도 동일하게 class 파일이 위치하는 class 파일의 Root Directory 이다.
Eclipse에서는 src 디렉토리에 위치하면 컴파일 후 자동으로 class파일의 Root Directory로 이동하게 된다.

셈플 1>

  1. import org.apache.log4j.Level;
  2. import org.apache.log4j.Logger;
  3.  
  4. public class LogTest {
  5. //정적 로그 객체를 생성할때.
  6. private final static Logger log = Logger.getLogger(Log.class);
  7.  
  8. public Logger logger;
  9. public LogTest(){
  10. logger = Logger.getLogger(this.getClass());
  11. }
  12.  
  13. public static void main(String[] args){
  14. //로그 객체를 생성
  15. LogTest test = new LogTest();
  16. Logger log = test.logger;
  17.  
  18. //로그 출력 레벨을 설정한다.
  19. log.setLevel(Level.TRACE);
  20.  
  21. log.trace("trace");
  22. log.debug("debug");
  23. log.info("info");
  24. log.warn("warn");
  25. log.error("error");
  26. log.fatal("fatal");
  27. }
  28. }

셈플2

  1. import java.util.HashMap;
  2. import java.util.Map;
  3.  
  4. import org.apache.log4j.Logger;
  5.  
  6. public class SampleService {
  7. Logger log = Logger.getLogger(this.getClass());
  8. Map data;
  9. public void run(String command){
  10. int code = process(command);
  11. if(code != 0) {
  12. String message = String.format("경고(코드:%d)",code);
  13. log.warn(message);
  14. }
  15. }
  16. private int process(String command){
  17. log.info("service ready......");
  18. if (data == null) {
  19. log.info("service data init.....");
  20. data = new HashMap();
  21. data.put("eat", "apple");
  22. data.put("read", "book");
  23. if ("break".equals(command)){
  24. int code = 500;
  25. String errMsg = "강제종료..";
  26. String message = String.format("%d : %s", code, errMsg);
  27. log.debug(message);
  28. return code;
  29. }
  30. }
  31. log.info("service run");
  32. if(data.get(command) == null) {
  33. int code = 400;
  34. String errMsg = "정보를 찾을 수 없습니다.";
  35. String message = String.format("%d : %s", code, errMsg);
  36. log.debug(message);
  37. return code;
  38. }
  39. log.info("service finish");
  40. return 0;
  41. }
  42. public static void main(String[] args){
  43. SampleService service = new SampleService();
  44. service.run("break");
  45. }
  46. }



셈플 3 

  1. import org.apache.commons.logging.Log;
  2. import org.apache.commons.logging.LogFactory;
  3.  
  4. public class Sample {
  5. public static void main(String[] args) {
  6. Man man = new Man();
  7. man.eat("바나나");
  8. }
  9.  
  10. public class Man extends AbstractHuman {
  11. public void eat(String what) {
  12. log.info(String.format("man eat %d", what));
  13. }
  14. }
  15.  
  16. public abstract class AbstractHuman {
  17. protected Log log;
  18. public AbstractHuman() {
  19. log = LogFactory.getLog(getClass());
  20. }
  21. }
  22. }


다른 카테고리의 글 목록

프레임워크 카테고리의 포스트를 톺아봅니다