2012-06-26 29 views
7

Chỉ có thể bao gồm thông tin tiêu đề ở đầu tệp cán?Chỉ bao gồm tiêu đề một lần ở đầu tệp cán

Tôi có tập tin cấu hình sau:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
      <file value="d:\temp\TTTest.log"/> 
      <layout type="log4net.Layout.PatternLayout"> 
       <header value="[Header]&#13;&#10;" /> 
       <param name="ConversionPattern" value="%-25utcdate{dd/MM/yyyy HH:mm:ss.fff}%-20property{log4net:HostName}%-30logger%-30thread%-7level%message%newline"/> 
      </layout> 
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> 
      <maximumFileSize value="5MB"/> 
      <rollingStyle value="Size"/> 
      <maxSizeRollBackups value="-1"/> 
      <countDirection value="1"/> 
     </appender> 

Khi tôi chạy ứng dụng của tôi, ví dụ hai lần tôi nhận được thông tin tiêu đề hai lần ví dụ

[Header] 
The Log line 
[Header] 
The Log line 
etc 

Tôi đang tìm kiếm để đạt được những điều sau đây:

[Header] 
The Log line 
The Log line 
etc 

Trả lời

0

Bạn cần một appender tùy chỉnh được thừa kế từ RollingFileAppender. Xem bài đăng bên dưới.

Log4net - How to know when a file is rolled?

Về cơ bản, bạn cần cung cấp logic riêng của bạn trong appender tùy chỉnh để viết tiêu đề của bạn cho mỗi tập tin mới. Bạn có thể làm điều này trong RollOverSize. Sẽ là một ý tưởng tốt để có được một bản sao của mã nguồn log4net để tham khảo.

10

Cách đơn giản nhất tôi đã tìm thấy để làm điều này là để tạo ra một lớp kế thừa từ RollingFileAppender và ghi đè như thế này phương pháp WriteHeader:

using System.IO; 
using System.Text; 
using log4net.Core; 
using log4net.Layout; 
using log4net.Util; 
using log4net.Appender; 

namespace CsvLogging 
{ 
    public class HeaderOnceAppender : RollingFileAppender 
    { 
     protected override void WriteHeader() 
     { 
      if (LockingModel.AcquireLock().Length == 0) 
      { 
       base.WriteHeader(); 
      } 
     } 
    } 
} 

sau đó sử dụng lớp này như appender:

<appender name="CsvFileAppender" type="CsvLogging.HeaderOnceAppender"> 
+0

Tôi cũng cần phải thêm bản lắp ráp cho loại này, vì log4net không biết nơi để tìm kiếm bigfoot

3

Tạo triển khai cụ thể của log4net.Layout.PatternLayout:

namespace MyApplication 
{ 
    using log4net.Layout; 

    public class MyConcretePatternLayout : PatternLayout 
    { 
     public override string Header => "My Header text here" 
    } 
} 

Sửa đổi tập tin log4net.config bạn để sử dụng bố trí mô hình tùy chỉnh mới này:

<appender name="MyFileAppender" type="log4net.Appender.RollingFileAppender"> 
     ... 
     <layout type="MyApplication.MyConcretePatternLayout"> 
     <conversionPattern... 
     </layout> 

    </appender> 

Bây giờ bất cứ khi nào cuộn tập tin do tiêu chí của bạn, bạn sẽ thấy "Tiêu đề văn bản của tôi ở đây" ở phía trên cùng của mỗi tập tin.

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