2012-11-29 4 views
7

일부 예약 된 작업을 수행하기 위해 타이머 컨트롤을 사용하는 Windows 서비스를 개발했습니다. 타이머 경과 이벤트는 log4net appender를 사용하여 Oracle 데이터베이스에 로그 항목이 작성되는 5 분마다 발생합니다.log4net Adonet Appender 연결 문제

DB 서버가 야간 콜드 백업을 위해 모든 연결을 닫을 때까지 모두 제대로 작동합니다. 그 이후 DB에있는 모든 로그가 손실되고 백업 프로세스가 30 분 미만이 걸리는 경우에도 서비스가 다시 시작되지 않는 한 아무 것도 기록되지 않습니다.

다른 게시물에서 log4net이 하나의 연결 만 사용하면 손실 된 경우 모든 후속 로그가 삭제된다는 것을 알았습니다. 이 문제를 해결하기 위해 ReconnectOnError 특성을 구성에서 true로 설정하여 사용하기 시작했습니다. 그러나 불행히도 문제는 여전히 존재합니다. 백업 후에도 로그가 누락됩니다. 추적 기능을 활성화하고 다음 오류를 발견했지만이 문제를 해결하는 방법을 모르겠습니다.

log4net [CustomAdoNetAppender] 예외 ERROR 데이터베이스 Oracle.DataAccess.Client.OracleException ORA-3113을 쓰는 동안 : 파일 끝 Oracle.DataAccess.Client.OracleException.HandleErrorHelper에서 통신 채널 (INT32 errcode를 , Oracle.DataAccess.Client.OracleException.HandleError (INT32 errcode를, OracleConnection CONN, 문자열 절차, IntPtr입니다 opsErrCtx, OpoSqlValCtx * pOpoSqlValCtx, 개체 SRC) 에서 OracleConnection CONN, IntPtr입니다 opsErrCtx, OpoSqlValCtx * pOpoSqlValCtx, 개체 SRC, 문자열 절차) 에서 Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery()at log4net.Appender.AdoNetAppender.SendBuffer (IDbTransaction dbTran, LoggingEvent [] events)log4net.Appender.AdoNetAppender.SendBuffer210 (LoggingEvent [] 이벤트)

하고 :

log4net : ERROR [CustomAdoNetAppender] 예외 데이터베이스에 기록하는 동안 System.InvalidOperationException : 연결이 이미의 일부 로컬 또는 분산 트랜잭션 at Oracle.DataAccess.Client.OracleConnection.BeginTransaction (IsolationLevel isolationLevel) at Oracle.DataAccess.Client.OracleConnection.BeginDbTransaction (IsolationLevel isolationLevel) at System.Data.Common.DbConnection.System.Data IDbConnection.BeginT log4net.Appender.AdoNetAppender.SendBuffer에서 ransaction() (LoggingEvent [] 이벤트)이 높게 평가에

어떤 도움!

답변

3

개인적으로 저는 이것을 log4net AdoNetAppender의 버그라고 생각합니다.

log4net에서 1.2.11 AdoNetAppender은 연결 풀링을 사용하는 대신 열려있는 연결을 유지하는 추세를 저지합니다.

또한 ReconnectOnError 옵션이 손상된 것처럼 보입니다. 현재 연결 상태가 ConnectionState.Open이 아닌 경우 다시 연결하려고 시도합니다. 잘못된 것으로 보입니다. 오류가 발생하면 연결 상태가 변경되지 않는다고 생각합니다 (열거 형 값 ConnectionState.Broken 제품의 향후 버전을 위해 예약 된 것으로 MSDN에 문서화되어 있습니다).

모두 연결 풀링을 올바르게 수행하는 사용자 지정 appender를 구현하는 것이 좋습니다. 매우 큰 수업이 아니므로 복제하고 수정하기가 쉽습니다.

+0

답장을 보내 주셔서 감사합니다. 어딘가 또는 사용자 정의 Appender에서 log4net 예외를 잡을 수 있습니까? – Lucky