2010-02-14 26 views
30

Tôi hiện đang xây dựng một ứng dụng ASP.Net-MVC bằng cách sử dụng log4net để ghi nhật ký, nhưng trình ghi nhật ký dường như chỉ dừng lại một cách ngẫu nhiên. Nó sẽ vui vẻ đăng nhập một lúc, và sau đó dừng lại, và sau đó sẽ bắt đầu lại sau một khoảng thời gian. Tôi thậm chí không chắc chắn nó là gì mà làm cho nó tiếp tục khai thác gỗ. Tôi không nói về một vài thông điệp bị mất - đôi khi nó biến mất trong một thời gian dài, chẳng hạn như một giờ hoặc lâu hơn.Log4net dừng đăng nhập ngẫu nhiên.

Tại sao nó dừng lại và bắt đầu như thế này? Làm thế nào tôi nên cấu hình đúng cách này để nó sẽ không dừng ngẫu nhiên như nó?

Dưới đây là cấu hình của tôi:

<log4net debug="true"> 
<appender name="RollingLogFileAppender" 
     type="log4net.Appender.RollingFileAppender"> 

    <file value="..\Logs\\CurrentLog.txt" /> 
    <appendToFile value="true" /> 
    <datePattern value="yyyyMMdd" /> 

    <rollingStyle value="Date" /> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
    <acceptOnMatch value="true" /> 

    <levelMin value="INFO" /> 
    <levelMax value="FATAL" /> 
    </filter> 

    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern 
    value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" /> 
    </layout> 

</appender> 

<root> 
    <level value="INFO" /> 
    <appender-ref ref="RollingLogFileAppender" /> 
</root> 

+1

Trong trường hợp của tôi nó đã được đặt lại khai thác gỗ (tái cấu hình nó, chứ không phải do thiết kế ..) mà gây ra những loại vấn đề - xem http://neilkilbride.blogspot.com.au /2008/04/configure-log4net-only-once.html – Jonno

+0

Bạn có muốn thêm câu trả lời hoặc nhận xét giải thích nguyên nhân gây ra sự cố của mình không, nếu bạn tìm thấy lý do? –

+0

Vâng, thật tuyệt khi biết điều gì gây ra vấn đề của bạn như Mark nói. Nhân tiện, tôi đã gặp vấn đề tương tự và thiết lập ReconnectOnError thành true theo cấu hình ADONetAppender làm việc cho tôi. – Jportelas

Trả lời

56

Log4Net sẽ fail silently nếu họ gặp khó khăn và nó là không thể ghi vào appenders của nó. Điều này thực sự là một điều tốt, vì nó có nghĩa là một chút thất bại đăng nhập sẽ không mang lại một hệ thống khác khỏe mạnh, nhưng nó có thể gây phiền nhiễu khi một cái gì đó không đăng nhập như bạn mong đợi.

Đặt cược tốt nhất của bạn là bật đăng nhập internal logging của riêng log4net để thực hiện một số chẩn đoán và (hy vọng) tìm ra lý do tại sao nó không thành công.

Vì vậy, trong tập tin cấu hình add ứng dụng của bạn:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
     <add key="log4net.Internal.Debug" value="true"/> 
    </appSettings> 
</configuration> 

mà sẽ bật khai thác gỗ bên trong, mà được gửi đến System.Diagnostics.Trace, vì vậy bạn có thể thêm:

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

để nắm bắt này cho một người tập tin.

+1

Bạn có một ví dụ đầy đủ hơn về tệp cấu hình như vậy không? Tôi đã thử nhiều biến thể và tôi vẫn gặp phải lỗi XML từ XmlSerializationReader. Ngay cả một thẻ '' trống là sự khác biệt giữa ngoại lệ và không. –

+0

Tôi gặp vấn đề tương tự, và trong trường hợp của tôi, có vẻ như bất cứ khi nào tôi mở một hộp thoại tập tin chuẩn, biểu tượng lớp phủ [Box] (https://box.com) chồng lên đè lên log4net.config trong quá trình với chính nó. –

+0

Điều này thực sự không phải là một điều tốt vì có thể có hệ thống giám sát và các công cụ thông báo lỗi tùy thuộc vào nó và nếu nó ngừng đăng nhập, không có cách nào chúng ta có thể biết một ngoại lệ xảy ra. – sotn

0

Gửi thông báo nhật ký kiểm tra sớm nhất có thể trong vòng đời ứng dụng của bạn, chỉ cần LogManager.GetLogger("Init").Info("Starting logging") đơn giản sẽ thực hiện. Nếu một số mã tham chiếu khác được đầu tiên để bắt đầu ghi nhật ký, một phần của quá trình khởi tạo của bạn có thể không thành công (vì nó tải các cài đặt từ một assembly khác, mà nó chỉ thực hiện một lần).

đọc ở đây: https://logging.apache.org/log4net/release/faq.html#first-log