Opracowałem usługę Windows, w której używam kontrolera timera do wykonywania niektórych zaplanowanych zadań. Zdarzenie upływu czasu ma miejsce co 5 minut, w którym wpis dziennika jest dokonywany za pomocą aplikacji log4net do bazy danych Oracle.log4net Adonet Appender Connection Issue
Wszystko działa dobrze, dopóki serwer DB nie zamknie wszystkich połączeń dla nocnej kopii zapasowej na zimno. Od tego czasu wszystkie dzienniki w DB są pomijane i nic nie jest rejestrowane, dopóki usługa nie zostanie ponownie uruchomiona, nawet jeśli proces tworzenia kopii zapasowej zajmie mniej niż 30 minut.
Z innych postów dowiedziałem się, że log4net używa tylko jednego połączenia, które jeśli zostanie utracone, wówczas wszystkie kolejne dzienniki zostaną odrzucone. Aby temu zaradzić, zacząłem używać zestawu atrybutów ReconnectOnError jako true w jego konfiguracji. Niestety problem nadal istnieje. Po wykonaniu kopii zapasowej nadal brakuje dzienników. Włączono śledzenie i znaleziono następujące błędy, ale nie wiem, jak rozwiązać ten problem.
log4net: ERROR [CustomAdoNetAppender] Wyjątek podczas zapisu do bazy Oracle.DataAccess.Client.OracleException ORA-03113: EOF na kanale komunikacyjnym przy Oracle.DataAccess.Client.OracleException.HandleErrorHelper (Int32 errCode , OracleConnection Conn, IntPtr opsErrCtx, OpoSqlValCtx * pOpoSqlValCtx sRC obiektu, procedura Ciąg) w Oracle.DataAccess.Client.OracleException.HandleError (Int32 errCode, OracleConnection Conn procedury String IntPtr opsErrCtx, OpoSqlValCtx * pOpoSqlValCtx sRC Object) przy Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery() w log4net.Appender.AdoNetAppender.SendBuffer (zdarzenia IDbTransaction dbTran, LoggingEvent []) w log4net.Appender.AdoNetAppender.SendBuffer (LoggingEvent [] wydarzenia)
oraz:
log4net: ERROR [CustomAdoNetAppender] Wyjątek podczas zapisu do bazy System.InvalidOperationException: Połączenie jest już częścią lokalnym lub transakcji rozproszonej w Oracle.DataAccess.Client.OracleConnection.BeginTransaction (IsolationLevel IsolationLevel) w Oracle.DataAccess.Client.OracleConnection.BeginDbTransaction (IsolationLevel IsolationLevel) w System.Data.Common.DbConnection.System.Data. IDbConnection.BeginT ransaction() na log4net.Appender.AdoNetAppender.SendBuffer (LoggingEvent [] wydarzenia)
Każda pomoc w tej sprawie bardzo ceniona !!
Dzięki za odpowiedź. Czy jest możliwe złapanie wyjątków log4net gdzieś lub w Custom Appender? – Lucky