2013-07-23 28 views
7

Tôi muốn thêm bản ghi mới để file.this là appender tôi:Log4net không ghi ra tập tin

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="mylogfile.txt"/> 
    <appendToFile value="true"/> 
    <rollingStyle value="Size"/> 
    <maxSizeRollBackups value="5"/> 
    <maximumFileSize value="10MB"/> 
    <staticLogFileName value="true"/> 
    <filter type="log4net.Filter.StringMatchFilter"> 
    <stringToMatch value="test"/> 
    </filter> 
    <filter type="log4net.Filter.StringMatchFilter"> 
    <stringToMatch value="error"/> 
    </filter> 
    <filter type="log4net.Filter.DenyAllFilter"/> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread] %level %logger - %message%newline%exception"/> 
    </layout> 
</appender> 
<root> 
    <level value="All"/> 
    <appender-ref ref="RollingFileAppender"/> 
</root> 

và trên lớp của tôi, tôi thêm

[assembly: XmlConfigurator(Watch = true)] 

và tôi thêm quyền truy cập tất cả mọi người cho tệp nhưng: log4net không ghi vào tệp. Tại sao?

Trả lời

23

Log4net không âm thầm khi có một vấn đề. Thiết kế conceit là không có đăng nhập là thích hợp hơn để lấy xuống các ứng dụng. Để tìm hiểu điều gì sẽ sai, bật gỡ lỗi nội Log4net bằng cách thêm phím này để [app/web] tập tin .config của bạn:

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

Các thông điệp debug sẽ được ghi vào giao diện điều khiển hoặc hệ thống System.Diagnostics.Trace. Thông tin chi tiết từ Phill Haack theo số http://haacked.com/archive/2006/09/26/Log4Net_Troubleshooting.aspx/

Có một số lý do khiến Log4net có thể không thành công. Cho phép các vấn đề trên thư mục tệp nhật ký, cho người mới bắt đầu (đặc biệt đúng đối với các quy trình máy chủ, nơi mà bạn có khả năng chạy trong một bộ hạn chế quyền cho bảo mật).

+0

xuất sắc mẹo! Trong 2 phút giải quyết một vấn đề tôi đã bị mắc kẹt trong một giờ. – StinkyCat

+0

Điều này dường như không hoạt động đối với tôi, cho đến khi tôi nhận ra đầu ra cho việc gỡ lỗi đi vào cửa sổ ngay lập tức, không phải đầu ra – JayJay

0

Bạn cần để khởi sự khai thác gỗ như là bước đầu tiên trong ứng dụng của bạn, và từ lắp ráp tương tự mà bạn có [assembly] tag:

Từ docs:

Vì vậy nếu bạn sử dụng cấu hình các thuộc tính bạn phải gọi log4net để cho phép nó đọc các thuộc tính. Một cuộc gọi đơn giản tới LogManager.GetLogger sẽ khiến các thuộc tính trên cụm gọi điện thoại được đọc và xử lý. Vì vậy, bắt buộc phải thực hiện cuộc gọi khi đăng nhập càng sớm càng tốt trong khi khởi động ứng dụng và chắc chắn trước khi bất kỳ hội đồng bên ngoài nào được tải và gọi.

Thêm một cái gì đó như thế này trong đầu của bạn lên mã:

LogManager.GetLogger("Initialises logging from assembly attributes"); 
0

Bạn nên thêm phần cấu hình này:

<configSections> 
<section name="log4net"  type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
</configSections> 

để tham khảo cấu hình log4net.