2011-03-29 2 views
0

내 log4j에 메시지 클래스 이름을 포함하지 않는 클래스 이름 :의 Log4j 메시지를 포함하는 (? 방법 :?) 대신

[INFO] 22:41 (?: decodeDirectory :?) 

어떤 생각이 왜 그렇게 것입니까?

log4j.properties는과 같이 읽습니다

log4j.rootLogger=INFO, logfile, console 

log4j.appender.logfile=org.apache.log4j.RollingFileAppender 
log4j.appender.logfile.File=ExifImageRA.log 
log4j.appender.logfile.MaxFileSize=1MB 
log4j.appender.logfile.MaxBackupIndex=1 
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 
log4j.appender.logfile.layout.ConversionPattern=[%5p] %d{mm:ss} (%F:%M:%L)%n%m%n%n 

log4j.appender.console=org.apache.log4j.ConsoleAppender 
log4j.appender.console.layout=org.apache.log4j.PatternLayout 
log4j.appender.console.layout.ConversionPattern=[%5p] %d{mm:ss} (%F:%M:%L)%n%m%n%n 
+1

log4j 구성, 코드 샘플 등을 제공해주십시오. 아무도 정보가 거의 없으면 도움을 줄 수 없습니다. – benw

+0

@benw - 내 개미 스크립트에서 javac에'debug = true'를 설정하면 INFO 레벨 메시지가 이제 해당 클래스 이름을 표시합니다. 이 수준의 세부 사항을 보려면'debug = true'가 필요합니까? – wulfgarpro

답변

1

그것은 실제로 로그 메시지에서 누락 된 것처럼 소스 파일 이름 (% F)과 행 번호 (%의 L)이다 보인다. javac Ant 태스크에 따르면

  • 다음 debug 속성 "[i]를 ndicates 소스는 디버그 정보를 컴파일해야하는지 여부를 오프 (off) 기본값을, -g로 설정 한 경우 : 없음이 전달되지 않습니다. 명령 줄 ... ".

  • javac 설명서에 따르면 javac -g:none으로 컴파일하면 .class 파일에서 소스 파일 이름과 줄 번호가 생략됩니다.

따라서, 로그 메시지 lossage는 Ant 빌드 파일에 javac 작업에서 debug="true"을 제거하는 직접적인 결과이다.

+0

이 모양이 정확합니다 - 모든 프로덕션 설정에서 소스 파일 이름과 줄 번호를 기록하는 것은 좋지 않습니다. log4j javadocs 경고는 매우 느립니다 * 작업 –

+0

@matt b : 한 가지 방법은 다음과 같습니다. 비동기 적으로 로그한다. 일부 응용 프로그램의 경우이 정보가 반드시 필요하다는 것을 알게되었습니다. 비동기 로깅은은 총알이 아니지만 상당히 도움이됩니다. –

+0

log4j는 여전히 로그 파일이 생성 될 때 소스 파일 이름과 줄 번호에이 토큰을 해석 할 것이므로 비동기 로깅이 어떻게 도움이 될지 확신 할 수 없다 - 비동기 적으로 완료된 유일한 작업은 I/O라고 생각한다. 메시지를 출력한다. –