Tôi đã phát triển một dịch vụ cửa sổ mà tôi đang sử dụng bộ điều khiển hẹn giờ để thực hiện một số tác vụ đã lên lịch. Sự kiện elapse bộ đếm thời gian xảy ra sau mỗi 5 phút trong đó một mục nhật ký được thực hiện bằng cách sử dụng bộ nạp log4net cho cơ sở dữ liệu Oracle.log4net Adonet Appender Connection Issue
Tất cả đều hoạt động tốt cho đến khi Máy chủ DB đóng tất cả các kết nối để sao lưu dự phòng lạnh hàng đêm. Kể từ thời điểm đó tất cả các bản ghi trong DB bị bỏ qua và không có gì được ghi lại trừ khi dịch vụ được khởi động lại mặc dù quá trình sao lưu mất ít hơn 30 phút.
Từ các bài đăng khác tôi thấy rằng log4net chỉ sử dụng một kết nối nếu bị mất thì tất cả các nhật ký tiếp theo sẽ bị hủy. Để khắc phục điều này, tôi bắt đầu sử dụng thuộc tính ReconnectOnError được đặt là true trong cấu hình của nó. Nhưng thật không may, vấn đề vẫn còn đó. Các bản ghi vẫn còn thiếu sau khi sao lưu. Tôi đã bật dò tìm và tìm thấy các lỗi sau nhưng tôi không biết cách giải quyết vấn đề này.
log4net: ERROR [CustomAdoNetAppender] Ngoại lệ trong khi văn bản cho cơ sở dữ liệu Oracle.DataAccess.Client.OracleException ORA-03.113: end-of-file trên kênh truyền thông tại Oracle.DataAccess.Client.OracleException.HandleErrorHelper (Int32 errCode , OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx * pOpoSqlValCtx, Object src, string thủ tục) tại Oracle.DataAccess.Client.OracleException.HandleError (Int32 errCode, OracleConnection conn, thủ tục string, IntPtr opsErrCtx, OpoSqlValCtx * pOpoSqlValCtx, Object src) tại Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery() tại log4net.Appender.AdoNetAppender.SendBuffer (IDbTransaction dbTran, LoggingEvent [] sự kiện) tại log4net.Appender.AdoNetAppender.SendBuffer (LoggingEvent [] sự kiện)
và:
log4net: ERROR [CustomAdoNetAppender] Ngoại lệ trong khi văn bản cho cơ sở dữ liệu System.InvalidOperationException: Kết nối đã là một phần của một giao dịch cục bộ hoặc phân phối tại Oracle.DataAccess.Client.OracleConnection.BeginTransaction (IsolationLevel isolationLevel) tại Oracle.DataAccess.Client.OracleConnection.BeginDbTransaction (IsolationLevel isolationLevel) tại System.Data.Common.DbConnection.System.Data. IDbConnection.BeginT ransaction() tại log4net.Appender.AdoNetAppender.SendBuffer (LoggingEvent [] sự kiện)
Bất kỳ trợ giúp nào về điều này được đánh giá cao !!
Cảm ơn bạn đã trả lời. Có thể bắt ngoại lệ log4net ở đâu đó hoặc trong Custom Appender không? – Lucky