[slf + log4j] 기초 + 단계별 로 그 를 각각 다른 파일 로 보 냅 니 다.
4843 단어 log4j
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 () 에서 사용자 정의 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Spring Boot에서 log4j 로깅 방법Spring Boot은 모든 내부 로그에 Commons Logging을 사용하지만, 기본 설정은 Java Util Logging, Log4J, Log4J2, Logback과 같은 일반적인 로그를 지원합니다.각 Log...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.