2016-07-01 2 views
0

데이터베이스에 감사 로그가 필요합니다. 그래서 나는 데이터베이스에 로그인하는 log4j 설정을 따르고 있습니다. 감사 로그에는 중요한 정보가 들어 있습니다. 따라서 어떻게 든 응용 프로그램이 데이터베이스에 로그인하지 못하면 파일에 로그인해야합니다 (실패한 데이터 만). 드문 경우이긴하지만 실패한 로깅 메시지를 파일에 저장해야합니다.log4j가 데이터베이스에 로그인하지 못하면 어떻게 파일에 로그인합니까?

# Define the DB appender 
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender 

# Set JDBC URL 
log4j.appender.DB.URL=url 

# Set Database Driver 
log4j.appender.DB.driver=oracle.jdbc.driver.OracleDriver 

# Set database user name and password 
log4j.appender.DB.user=pwd 
log4j.appender.DB.password=user 

# Set the SQL statement to be executed. 
log4j.appender.DB.sql=INSERT INTO audit_log(loglevel, logger, message) VALUES('%p', '%C{1}:%L','%m%n') 

# Define the layout for db appender 
log4j.appender.DB.layout=org.apache.log4j.PatternLayout 

이러한 시나리오를 기록 할 수있는 다른 파일 첨부기를 만들었지 만 데이터베이스 로깅이 실패했다는 것을 어떻게 알 수 있습니까? 모든 로깅 함수는 void (info, error, warn, fatal)이므로 데이터베이스 로그를 알 수없는 콜백이 실패합니다. 누구나 이런 시나리오를 발견하고 해결책을 찾거나이를 달성하기 위해 주변을 돌아 다니는 사람이 있습니까? 또는 데이터베이스 및 파일에 로그인 할 수있는이 시나리오의 다른 로깅 메커니즘. SQL 예외가 ErrorHandler를 처리 할 것입니다 던져 경우 현재

org.apache.log4j.jdbc.JDBCAppender#flushBuffer 

코드를 확인할 수 있습니다

log4j.appender.failedToLog=org.apache.log4j.RollingFileAppender 
log4j.appender.failedToLog.File=./logs/failedToLog/failedToAuditLog.log 
log4j.appender.failedToLog.MaxFileSize=5MB 
log4j.appender.failedToLog.MaxBackupIndex=10 
log4j.appender.failedToLog.layout=org.apache.log4j.PatternLayout 
log4j.appender.failedToLog.layout.ConversionPattern=%-5p [%d{dd-MMM-yyyy HH:mm:ss.SSS z}] - [%C{1}:%L] - %m%n 


log4j.category.failedAuditLogger=DEBUG, failedToLog 
log4j.additivity.failedAuditLogger=false 

답변

0

. 기본적으로 OnlyOnceErrorHandler이며 오류를 strerr에 인쇄합니다 (단 처음 만). 오류 처리의 또 다른 구현 인 FallbackErrorHandler가 있습니다. 오류 처리기를 구성하는 방법을 찾을 수 있습니다. 응용 프로그램이 다음 파일에 로그인해야 데이터베이스에 로그인하는 데 실패 든 경우

+0

감사합니다. @ commit-man, 귀하의 답변은 제 요구 사항을 정확히 충족시킵니다. 도와 주셔서 감사합니다 :-) – Aditya

0

단지를 호출 순서로 호출 여러 펜더를 래핑

사용하십시오 FailoverAppender (데이터 만 실패) 주 applet (s)가 실패하면 백업 appender (s).

+0

@copeg 고맙습니다. 제 질문에 대한 대답은 FailoverAppender는 log4j2의 일부이며 log4j 1.2.17 버전을 사용하고 있습니다. :-) – Aditya

관련 문제