2009-04-16 27 views
140

Tôi sử dụng log4net mọi lúc, nhưng một điều tôi chưa bao giờ tìm ra là làm thế nào để biết những gì đang diễn ra bên trong. Ví dụ, tôi đã có một appender console và một appender cơ sở dữ liệu trong dự án của tôi. Tôi đã thực hiện một vài thay đổi đối với cơ sở dữ liệu và mã, và bây giờ trình bổ sung cơ sở dữ liệu không hoạt động nữa. Tôi sẽ tìm ra lý do tại sao cuối cùng, nhưng nó sẽ giúp rất nhiều nếu tôi có thể nhìn thấy những gì đang xảy ra bên trong log4net.Cách theo dõi các sự cố log4net

Log4net có tạo bất kỳ loại đầu ra nào mà tôi có thể xem để cố gắng xác định nguồn gốc của sự cố của tôi không?

Trả lời

224

Trước tiên, bạn phải thiết lập giá trị này vào file cấu hình ứng dụng:

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

Sau đó, để xác định các tập tin mà bạn muốn lưu đầu ra bạn có thể thêm đoạn mã sau vào file .config cùng :

<configuration> 
... 

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

... 
</configuration> 

Bạn có thể tìm giải thích chi tiết hơn theo cách 'Làm cách nào để kích hoạt tính năng gỡ lỗi nội bộ log4net?' trong số log4net FAQ page.

+7

Chỉ cần đảm bảo rằng quy trình mà ứng dụng của bạn đang chạy có quyền đối với đường dẫn nơi bạn muốn tạo tệp văn bản ghi nhật ký ("C: \ tmp \ log4net.txt" trong ví dụ trên) – Jtrx

+0

Mẹo để tìm những gì đang xảy ra trên ứng dụng của tôi nhờ: D – NFRiaCowboy

+2

Dường như gỡ lỗi nội bộ không có dấu thời gian – snit80

15

Ngoài câu trả lời ở trên, bạn có thể sử dụng dòng này để xem nhật ký trong thời gian thực thay vì đầu ra c: \ tmp \ log4net.txt.

log4net.Util.LogLog.InternalDebugging = true; 

Ví dụ: trong ứng dụng bảng điều khiển, bạn có thể thêm và sau đó xem đầu ra theo thời gian thực. Tốt cho việc gỡ lỗi log4net trong một cuộc thử nghiệm nhỏ để xem điều gì đang xảy ra với ứng dụng mà bạn đang thử nghiệm.

24

Nếu bạn đang sử dụng một file log4net config bạn cũng có thể bật gỡ lỗi có bằng cách thay đổi các nút trên xuống:

<log4net debug="true"> 

này sẽ làm việc một khi cấu hình được nạp lại và giả định dấu vết của bạn nghe được thiết lập đúng cách .

0

Nếu nhật ký nội bộ không cung cấp cho bạn đủ thông tin, rất dễ dàng để xây dựng và gỡ lỗi source code. Nếu bạn không muốn kết hợp với dự án phát triển của mình, hãy thêm một ứng dụng giao diện điều khiển đơn giản chỉ ghi nhật ký một thư, sao chép dự án của bạn là log4net.config vào ứng dụng này và gỡ lỗi lớp đang được đề cập đến.

0

Đảm bảo ứng dụng gốc nơi điểm nhập của bạn ghi nhật ký gì đó vào log4net. Hãy cung cấp một trong những điều sau:

private static ILog logger = LogManager.GetLogger(typeof(Program)); 
static void Main(string[] args) 
{ 
    logger.InfoFormat("{0} v.{1} started.", Assembly.GetExecutingAssembly().GetName().Name, Assembly.GetExecutingAssembly().GetName().Version.ToString()); 

Với 2.0.8, tôi đã có một tình huống thú vị. Tôi đã tạo ra một dự án thư viện và một dự án exe thử nghiệm sẽ giới thiệu các khả năng của nó. Dự án thư viện được thiết lập để sử dụng Log4net như là dự án exe. Dự án exe đã sử dụng thuộc tính assemblyinfo để đăng ký cấu hình, nhưng tôi đã không nhận được đầu ra ghi nhật ký cho giao diện điều khiển hoặc tệp nhật ký. Khi tôi bật đăng nhập gỡ lỗi nội bộ log4net, tôi nhận được một số thông báo nội bộ được ghi vào bảng điều khiển, nhưng vẫn không có nhật ký bình thường nào của tôi. Không có lỗi nào được báo cáo. Tất cả bắt đầu hoạt động khi tôi thêm mã trên vào chương trình của tôi. Log4net được thiết lập đúng cách.

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