Cấu hình Log4net để ghi vào nhiều tệp


130

Tôi muốn viết nhật ký cho 2 tệp nhật ký khác nhau từ cùng một quy trình.

đó có phải là điều có thể làm khi sử dụng log4net không?

Tôi sẽ cần phải viết các thông điệp riêng biệt cho mỗi tệp nhật ký. Làm thế nào tôi có thể viết một tin nhắn cho một appender cụ thể?


3
Bạn không thể đăng nhập vào các appender riêng biệt - bạn cần định cấu hình các logger khác nhau và đính kèm appender phù hợp với từng app. Sau đó đăng nhập các thông điệp khác nhau để ghi nhật ký khác nhau.
Vinay Sajip

Đây là cách tôi đã làm với mã theo cấu hình: stackoverflow.com/questions/27846157/ Khăn
Jay Sullivan

Câu trả lời:


82

Có, chỉ cần thêm nhiều FileAppender vào logger của bạn. Ví dụ:

<log4net>
    <appender name="File1Appender" type="log4net.Appender.FileAppender">
        <file value="log-file-1.txt" />
        <appendToFile value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date %message%newline" />
        </layout>
    </appender>
    <appender name="File2Appender" type="log4net.Appender.FileAppender">
        <file value="log-file-2.txt" />
        <appendToFile value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date %message%newline" />
        </layout>
    </appender>

    <root>
        <level value="DEBUG" />
        <appender-ref ref="File1Appender" />
        <appender-ref ref="File2Appender" />
    </root>
</log4net>

5
Đẹp .. :) tuy nhiên, tôi sẽ cần phải viết các thông điệp riêng biệt cho mỗi tệp nhật ký. Làm thế nào tôi có thể viết một tin nhắn cho một appender cụ thể? cảm ơn. ofer
ofer

2
@ ofer- xem câu trả lời của tôi về cách làm điều đó.
RichardOD

1
Điều gì xảy ra nếu bạn muốn File1Appender ghi nhật ký lỗi DEBUG và File2Appender để ghi lại lỗi ERROR?
JsonStatham

Tôi đang cố gắng để đạt được những thứ tương tự. Sẽ rất vui nếu bạn có thể trả lời câu hỏi của tôi: stackoverflow.com/questions/24886364/
Kẻ

202

Những câu trả lời này rất hữu ích, nhưng tôi muốn chia sẻ câu trả lời của mình với cả phần app.config và phần mã c #, vì vậy sẽ ít đoán hơn cho người tiếp theo.

<log4net>
  <appender name="SomeName" type="log4net.Appender.RollingFileAppender">
    <file value="c:/Console.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Composite" />
    <datePattern value="yyyyMMdd" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="1MB" />
  </appender>
  <appender name="Summary" type="log4net.Appender.FileAppender">
    <file value="SummaryFile.log" />
    <appendToFile value="true" />
  </appender>
  <root>
    <level value="ALL" />
    <appender-ref ref="SomeName" />
  </root>
  <logger additivity="false" name="Summary">
    <level value="DEBUG"/>
    <appender-ref ref="Summary" />
  </logger>
</log4net>

Sau đó, trong mã:

ILog Log = LogManager.GetLogger("SomeName");
ILog SummaryLog = LogManager.GetLogger("Summary");
Log.DebugFormat("Processing");
SummaryLog.DebugFormat("Processing2"));

Tại đây c: /Console.txt sẽ chứa "Đang xử lý" ... và \ SummaryFile.log sẽ chứa "Đang xử lý2"


58
Tôi chỉ muốn gọi sự chú ý đến thuộc tính addergy = "false" trên logger để ngăn mọi thứ không được ghi vào thư mục gốc.
Jason Hernandez

1
Đây là một ví dụ tuyệt vời về sức mạnh của log4net. Cảm ơn!
nghiền nát

5
Cấu hình trên bị thiếu <layout> ... </layout>, không có nó tôi không thấy bất kỳ thông báo nào trong tệp nhật ký.
CrnaStena

@CrnaStena Bạn có chắc chắn đó là thay đổi duy nhất bạn đã thực hiện?
Gary

1
@Craig Xem câu hỏi này để biết thêm về cách sử dụng: stackoverflow.com/questions/1999382/iêu
Gary

60

Vinay là đúng. Trả lời nhận xét của bạn trong câu trả lời của anh ấy, một cách bạn có thể làm như sau:

<root>
    <level value="ALL" />
    <appender-ref ref="File1Appender" />
</root>
<logger name="SomeName">
    <level value="ALL" />
    <appender-ref ref="File1Appender2" />
</logger>

Đây là cách tôi đã làm nó trong quá khứ. Sau đó, một cái gì đó như thế này cho nhật ký khác:

private static readonly ILog otherLog = LogManager.GetLogger("SomeName");

Và bạn có thể lấy logger bình thường của bạn như sau:

private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

Đọc phần loggers và appender của tài liệu để hiểu cách thức hoạt động của nó.


3
Tôi có cùng thiết lập này trong một trong các ứng dụng của mình và nó không hoạt động với tôi :(
Román

1
Cuộc thảo luận này rất cũ ... hy vọng bạn có thể trả lời ... Tôi đã thử cách tiếp cận của bạn nhưng hai logger ghi cùng một thông điệp. Như trong log.Info ("") và otherLog.Info ("") viết tin nhắn cho cả hai tệp nhật ký.
SutharMonil

1
@daniel_aren Vâng, những gì tôi đã làm là tôi đã sử dụng khối appender để tạo hai appender với các đường dẫn tệp riêng biệt (giống như ở trên cái này) .... thật hiệu quả, chúng tôi có hai khối appender có tên: fil Ứng dụng1 và fil Ứng dụng2 ... .
SutharMonil

1
@SutharMonil chỉ cần thêm 'addergy = "false" vào nút logger, như trong câu trả lời của Gary và được đánh dấu bởi Jason Hernandez. Trong trường hợp này, nó vẫn sẽ đặt tất cả các tin nhắn trong root nhưng chỉ các tin nhắn từ otherLog.Info ("") sẽ xuất hiện trong File1Appender2
Freedomn-m

Cho đến nay câu trả lời chính xác nhất.
Fabricio

41

Tôi muốn đăng nhập tất cả các thông báo vào root logger và để có một nhật ký riêng có lỗi, đây là cách thực hiện:

<log4net>
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
        <file value="allMessages.log" />
        <appendToFile value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date  %-5level %logger  - %message%newline" />
        </layout>
    </appender>

    <appender name="ErrorsFileAppender" type="log4net.Appender.FileAppender">
        <file value="errorsLog.log" />
        <appendToFile value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date  %-5level %logger  - %message%newline" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="ERROR" />
            <levelMax value="FATAL" />
        </filter>
    </appender>

    <root>
        <level value="ALL" />
        <appender-ref ref="FileAppender" />
        <appender-ref ref="ErrorsFileAppender" />
    </root>
</log4net>

Lưu ý việc sử dụng phần tử lọc.


0

Sử dụng cấu hình XML bên dưới để định cấu hình nhật ký thành hai hoặc nhiều tệp,

<log4net>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="logs\log.txt" />         
      <appendToFile value="true" /> 
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="10MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">           
        <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
      </layout>
    </appender>
     <appender name="RollingLogFileAppender2" type="log4net.Appender.RollingFileAppender">
      <file value="logs\log1.txt" />         
      <appendToFile value="true" /> 
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="10MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">        
        <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
      </layout>
    </appender>
    <root>
      <level value="All" />
      <appender-ref ref="RollingLogFileAppender" />
    </root>
     <logger additivity="false" name="RollingLogFileAppender2">
    <level value="All"/>
    <appender-ref ref="RollingLogFileAppender2" />
    </logger>
  </log4net>

Cấu hình XML ở trên ghi vào hai tệp khác nhau.

Để có được phiên bản cụ thể của logger theo chương trình,

ILog logger = log4net.LogManager.GetLogger ("RollingLogFileAppender2");

Bạn có thể nối thêm hai hoặc nhiều phần tử appender bên trong phần tử gốc log4net để đăng nhập vào nhiều tệp.

Thông tin thêm về cấu trúc cấu hình XML ở trên hoặc ứng dụng nào phù hợp nhất cho ứng dụng của bạn, Đọc chi tiết từ liên kết bên dưới,

https://logging.apache.org/log4net/release/manual/configuration.html https://logging.apache.org/log4net/release/sdk/index.html

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.