2009-03-24 32 views
13

Có vẻ như Log4Net âm thầm tắt vì những lý do không rõ ràng và tôi không biết cách khắc phục sự cố đó. Linh cảm của tôi là một appender cụ thể là không trên một thông điệp tường trình cụ thể và dường như tắt toàn bộ ngăn xếp.Làm thế nào để khắc phục sự cố log4net khi nó ngừng ghi nhật ký

Có cách nào để khiến Log4Net ném một lệnh lừa đảo (ít nhất là trong giai đoạn gỡ lỗi của chúng tôi) thay vì tắt dịch vụ không.

Trả lời

13

Tôi nghĩ rằng có một giá trị cấu hình bạn có thể đặt trong phần appSettings của app.config của bạn/web.config để bật báo cáo debug nội bộ trong log4net:

<appSettings> 
    <add key="log4net.Internal.Debug" value="true"/> 
</appSettings> 

này sẽ cung cấp cho bạn một số cái nhìn sâu sắc vào bất kỳ các lỗi mà log4net có thể bị nuốt.

+5

Sau khi tìm hiểu thêm một chút (theo con trỏ của bạn để bật gỡ lỗi nội bộ, có vẻ như việc bật trình lắng nghe cho System.Diagnostics.Trace cũng được yêu cầu –

+3

Cũng cần lưu ý rằng appSettings cần phải đi trước hệ thống.thuộc tính chẩn đoán. – Dan

22

Mở rộng trên câu trả lời trước -

Để thêm một dấu vết người nghe cho các dấu vết log4net.Internal.Debug, thêm video này vào ứng dụng cấu hình của bạn:

<system.diagnostics> 
    <trace autoflush="true"> 
     <listeners> 
     <add 
      name="textWriterTraceListener" 
      type="System.Diagnostics.TextWriterTraceListener" 
      initializeData="c:\temp\log4net.txt" /> 
     </listeners> 
    </trace> 
    </system.diagnostics> 

Thay thế giá trị thuộc tính initializeData trên với bạn đường dẫn tệp nhật ký mong muốn. Hãy chắc chắn rằng ứng dụng hoặc quá trình máy chủ ASP.NET có quyền ghi vào tệp này.

Một điều bạn có thể làm là kiểm tra các thư được trả về từ cấu hình log4net khi khởi động. Kể từ log4net phiên bản 1.2.11, phương thức XmlConfigurator.Configure() trả về một ICollection chứa các chuỗi liệt kê các vấn đề gặp phải trong quá trình cấu hình.

Vì vậy, nếu bạn đã có một cái gì đó như thế này:

XmlConfigurator.Configure(); 

thay đổi nó để

ICollection configMessages = XmlConfigurator.Configure(); 

và kiểm tra configMessages trong một trình gỡ lỗi, hoặc in chúng ra nơi nào đó, ví dụ

foreach (string msg in configMessages) 
{ 
    Console.WriteLine(msg); 
} 

Nếu mọi thứ khác không thành công, hãy tải xuống nguồn log4, thêm dự án vào giải pháp của bạn và tham khảo dự án thay vì log4net.dll. Bây giờ bạn có thể bước vào các cuộc gọi log4net trong trình gỡ lỗi.

0

Tôi đã có một thời gian khó khăn để tìm ra lý do tại sao nhật ký tệp và trình ghi nhật ký sql không hoạt động. Tôi đã thay đổi bảng SQL mặc định và nó chỉ ra rằng kiểu dữ liệu Int là không tốt và Int32 là giá trị chính xác. Tôi dường như không thể tìm thấy thông tin này cho đến khi tôi đã gỡ lỗi trong Visual Studio và bước vào phương pháp đăng nhập. Thi hành phương pháp này bị tạm dừng trên breakpoint của tôi và tôi chạy lệnh thiết lập trong cửa sổ Immediate:

log4net.Config.XmlConfigurator.Configure()

tôi đã có thể xem phản hồi ngay lập tức và không có trong thực tế một ngoại lệ được ném khi mã cấu hình đó chạy. Nó được hiển thị trong Cửa sổ ngay lập tức và tôi đã có thể giải quyết vấn đề.

Hy vọng điều này sẽ giúp ai đó.

Các vấn đề liên quan