[slf + log4j] 기초 + 단계별 로 그 를 각각 다른 파일 로 보 냅 니 다.

4843 단어 log4j
보통 로 그 는 slf4j + log4j 또는 slf4j + logback 을 기반 으로 인쇄 합 니 다.slf4j 는 외관 으로 인터페이스 만 제공 하고 실제 인쇄 는 log4j 또는 logback 이 제공 하 는 기능 을 사용 합 니 다.본문 은 log 4 j 를 예 로 들 었 다.
1. log4j 의 기초:http://www.cnblogs.com/Fskjb/archive/2011/01/29/1947592.html
요점: Log4J 에는 항상 rootLogger 가 존재 합 니 다. logger 는 계승 할 수 있 고 logger 이름 을 사용자 정의 할 수 있 습 니 다. 이 이름 은 Logger. getLogger ("name") 의 name 과 관련 이 있 습 니 다.
2. slf4j 의 장점 및 jar 패키지 참조:http://www.importnew.com/7450.html
요점:
(1) slf4j 는 독립 적 이 고 구체 적 인 인쇄 로그 프레임 워 크 로 log4j 와 결합 할 수 있 으 며 logback 으로 전환 할 수 있 습 니 다.
(2) log4j 에 비해 slf4j 는 자리 표시 자 를 사용 할 수 있 습 니 다. 예 를 들 어 log4j 의 쓰기:
logger.debug("Processing trade with id: " + id + " symbol: " + symbol);

slf4j 사용 가능:
logger.debug("Processing trade with id: {} and symbol : {} ", id, symbol);

주의: {1}, {2}, {3} 이런 형식 은 안 됩 니 다.
이렇게 하면 실행 할 때 제 공 된 실제 문자열 로 대 체 됩 니 다.코드 에 있 는 문자열 연결 횟수 를 줄 일 뿐만 아니 라 새 String 대상 도 절약 할 수 있 습 니 다.
(3) isDebugEnabled (), isInfoEnabled () 의 판단 을 생략 하고 slf4j 는 자동 으로 판단 을 제공 합 니 다.
3. slf4j 인쇄 이상
가 변 매개 변수 가 있 는 로 그 를 인쇄 하 는 동시에 이상 정 보 를 인쇄 해 야 합 니 다. slf4j 로 exception 을 매개 변수 마지막 에 놓 을 수 없습니다. 즉, 할 수 없습니다.
logger.error("error info {}#{}",new Object[]{a, b}, e);// e  exception  

다만:
logger.error("error info {}#{}",new Object[]{a, b, e});// e  exception  

e 를 가 변 대상 배열 의 마지막 에 두 개의 매개 변수 가 필요 할 때 e 를 세 번 째 요소 로 하면 됩 니 다.
첫 번 째 쓰 기 는 e 를 일반 Object 로 하고 e. toString () 방법 으로 인쇄 합 니 다. 이상 한 스 택 정 보 를 출력 할 수 없습니다.
주의: 이 점 에 대해 자료 상 slf4j 1.7. * 이상 버 전 은 첫 번 째 방법 에 따라 쓸 수 있 고 1.7. * 이하 에는 두 번 째 방법 에 따라 써 야 합 니 다.그러나 본인 테스트 1.7. * 도 두 번 째 표기 법 에 따라 만 가능 하 다.
4. 어떻게
서로 다른 단계 의 로그 가 서로 다른 파일 로 출력 되 었 습 니 다. 이미 많은 글 이 설명 되 어 있 으 니 참고 할 수 있 습 니 다.예 를 들 면:
http://blog.csdn.net/wangchsh2008/article/details/8812857
http://www.cprogramdevelop.com/4496123/
로그 4j. logger. A. B. C = info, ferror, finfo, fdebug 등 logger 를 사용자 정의 하면 설명 할 필요 가 있 습 니 다.
또한 ferror, finfo, fdebug 로 각각 3 개의 파일 을 정의 했다.
##  error  appender
log4j.appender.ferror.Threshold = error
log4j.appender.ferror = A.B.C.common.util.MyDailyRollingFileAppender
log4j.appender.ferror.File = ${log.root}/error.log
log4j.appender.ferror.Append = true
log4j.appender.ferror.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.ferror.layout = org.apache.log4j.PatternLayout
log4j.appender.ferror.layout.ConversionPattern = %-d{yyyy-MM-dd HH\:mm\:ss} [%p] %X{requestID} [%c-%L]- %m%n

##  info  appender
log4j.appender.finfo.Threshold = info
log4j.appender.finfo = A.B.C.common.util.MyDailyRollingFileAppender
log4j.appender.finfo.File = ${log.root}/info.log
log4j.appender.finfo.Append = true
log4j.appender.finfo.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.finfo.layout = org.apache.log4j.PatternLayout
log4j.appender.finfo.layout.ConversionPattern = %-d{yyyy-MM-dd HH\:mm\:ss} [%p] %X{requestID} [%c-%L]- %m%n

##  debug  appender
log4j.appender.fdebug.Threshold = debug
log4j.appender.fdebug = A.B.C.common.util.MyDailyRollingFileAppender
log4j.appender.fdebug.File = ${log.root}/debug.log
log4j.appender.fdebug.Append = true
log4j.appender.fdebug.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.fdebug.layout = org.apache.log4j.PatternLayout
log4j.appender.fdebug.layout.ConversionPattern = %-d{yyyy-MM-dd HH\:mm\:ss} [%p] %X{requestID} [%c-%L]- %m%n

###root log
log4j.rootLogger = ${log.level},finfo

## my log
log4j.logger.A.B.C=info,ferror,finfo,fdebug

마지막 으로 어떤 단계 의 로그 가 나 올 지 는 log4j. logger. A. B. C 가 정의 하 는 단계 에 달 려 있 습 니 다.위 설정 과 같이 debug 로 그 는 인쇄 되 지 않 습 니 다.
원인:
log4j 는 log4jLoggerAdapter 의 isDebugEnabled () 방법 을 자동 으로 호출 합 니 다.
public boolean isDebugEnabled() {
    return this.logger.isDebugEnabled();
}
public boolean isDebugEnabled() {
    return this.repository.isDisabled(10000)?false:Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel());
}

이 곳 의 getEffective Level () 은 log4j. logger. A. B. C 가 정의 하 는 단계 info 를 되 돌려 줍 니 다. debug 는 이 단계 보다 작 으 면 무시 합 니 다.
debug 단계 로 설정 하면 검증 을 통과 할 수 있 습 니 다. 나중에 인쇄 할 때 자신 이 다시 쓴 Daily Rolling FileAppender 류 를 계승 하여 실 현 된 Public boolean isAsSevereAsThreshold (Priority priority priority) 방법 을 사용 합 니 다. 이 방법의 매개 변 수 는 priority 가 실제 로 그 를 인쇄 할 때 호출 하 는 방법 입 니 다. 예 를 들 어 logger. debug ("로그 입 니 다") 를 호출 하 는 것 입 니 다.priority = Level. DEBUG 입 니 다.그리고 이 단 계 를 각각 설정 한 ferror, finfo, fdebug 의 Threshold 값 과 비교 하 는 규칙 은 isAs Severe As Threshold () 에서 사용자 정의 합 니 다.

좋은 웹페이지 즐겨찾기