Tôi có một chương trình thực hiện nhiều cuộc gọi log4net tới nhật ký "myprogram". Nó cũng gọi mã khác mà làm cho cuộc gọi log4net để logger khác. Tôi muốn chụp tất cả nhật ký cao hơn INFO cho "myprogram" và tất cả nhật ký cao hơn WARN cho mọi thứ khác. Bằng cách này, tôi nhận được các thông báo đang hoạt động cụ thể cho công việc tôi đang làm, nhưng vẫn được thông báo về những điều có thể xảy ra trong mã hỗ trợ. Tôi muốn điều này được gửi đến cả Bàn điều khiển và tệp nhật ký.Loại bỏ đăng nhập trùng lặp trong log4net
Tôi có cấu hình log4net sau:
<log4net>
<root>
<level value="WARN" />
<appender-ref ref="Console" />
<appender-ref ref="LogFile" />
</root>
<logger name="myprogram">
<level value="INFO" />
<appender-ref ref="Console" />
<appender-ref ref="LogFile" />
</logger>
<appender name="Console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message%newline" />
</layout>
<threshold value="INFO" />
</appender>
<appender name="LogFile" type="log4net.Appender.RollingFileAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="- %utcdate %level %logger %ndc %thread %message%newline" />
</layout>
<appendToFile value="false" />
<staticLogFileName value="true" />
<rollingStyle value="Once" />
<file value="mylogfile" />
<immediateFlush value="true" />
<threshold value="INFO" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
</appender>
</log4net>
Điều này làm cho cảm giác hoàn hảo với tôi: đăng nhập> WARN cho tất cả mọi thứ và> INFO cho cụ "myprogram" logger.
Vấn đề là tôi nhận được thông báo INFO được ghi lại hai lần trên cả Bảng điều khiển và LogFile. Điều này chỉ xảy ra nếu tôi có đầy đủ các thành phần <root>
và <logger>
; nếu tôi xóa một trong hai, thì cái còn lại hoạt động như tôi mong đợi.
Tôi có thể hiểu được liệu tôi có đang ghi nhật ký các mục WARN hay không (nhưng chương trình của tôi khớp với cả "root" và "myprogram"), nhưng nó xảy ra tại INFO mặc dù ROOT (có lẽ) được đặt thành WARN.
Tôi có làm gì sai ở đây hay đây là lỗi log4net/mơ hồ không?
Điều này làm việc tốt cho tôi khi tôi gặp phải vấn đề tương tự. Điều này tránh được vấn đề về độ nhạy cũng như –
Đây là câu trả lời đúng. Logger thừa hưởng appenders từ root. Cảm ơn! –
@ Jeffrey bạn có biết những vấn đề gì với việc sử dụng độ nhạy không? Tôi đã không thành công trong việc tìm kiếm bất kỳ tài liệu nào mà Google biết. – Tinister