簡體   English   中英

Log4net 緩沖區在有損設置中已滿時不會刷新

[英]Log4net buffer not flushing when full in lossy setup

我在 C# webAPI 中使用 Log4net ElasticSearchAppender, BufferSize10Lossy設置為true以保持性能,如下所示: https : //github.com/bruno-garcia/log4net.ElasticSearch/wiki/02-Appender-設置

<lossy value="false"/> Log4net.ElasticSearch 使用緩沖區來收集事件,然后將它們刷新到后台線程上的 Elasticsearch 服務器。 如果緩沖區已滿且尚未刷新,則將此值設置為 true 將導致 log4net.Elasticsearch 開始丟棄事件。 如果 Elasticsearch 服務器無響應或脫機,則可能會發生這種情況。

我還將評估器設置為ERROR ,如果發生 ERROR ,無論如何都會強制刷新緩沖區。

這是相關的配置文件:

<?xml version="1.0"?>
<log4net>
    <appender name="ElasticSearchAppender" type="log4net.ElasticSearch.ElasticSearchAppender, log4net.ElasticSearch">
    <threshold value="ALL" />
    <layout type="log4net.Layout.PatternLayout,log4net">
      <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p %c{1}:%L - %m%n" />
    </layout>
    <connectionString value="Server=my-elasticsearch-server;Index=foobar;Port=80;rolling=true;mode=tcp"/>
    <lossy value="true" />
    <bufferSize value="10" />
    <evaluator type="log4net.Core.LevelEvaluator">
      <threshold value="ERROR" />
    </evaluator>
  </appender>
  <root>
    <level value="DEBUG" />
    <appender-ref ref="ElasticSearchAppender" />
  </root>
</log4net>

這是我得到的行為:由 ERROR(評估器)觸發的刷新工作正常,但INFODEBUG消息本身永遠不會單獨刷新到 Elastic ,即使其中有 10、20 或 100 個。

在此配置中,緩沖區在滿時永遠不會刷新,它只會不斷丟棄DEBUGINFO日志,直到出現ERROR ,即使 Elastic 在線且響應良好。

注意:我嘗試將lossy設置為 false,並且緩沖區在滿時刷新。 但我擔心這會嚴重損害我的應用程序響應能力。

我有什么問題嗎? 有沒有更好的日志記錄方式,同時最大限度地減少性能影響?

測試行為后,這是我發現的:

lossy為真時,緩沖區變滿永遠不會觸發刷新。

Bruno garcia的文章對Lossy屬性相當誤導,尤其是這句話:

如果緩沖區已滿 (...),則將此值設置為 true 將導致 (...) 開始丟棄事件。 如果 Elasticsearch 服務器無響應或脫機,則可能會發生這種情況

事實上,它與 appender/Elastic 無響應無關:在有損配置中,只有評估器會觸發緩沖區的刷新:

  • 級別評估器,如果發生某個級別的事件(例如:致命或錯誤),將刷新,給出崩潰的上下文(=崩潰前發生的最后一個日志)。

     <evaluator type="log4net.Core.LevelEvaluator"> <threshold value="ERROR"/> </evaluator>
  • 如果某個時間間隔已過,時間評估器將刷新

    <evaluator type="log4net.Core.TimeEvaluator"> <interval value="300"/> </evaluator>

出於我的目的,我最終決定配置一個間隔為 5 分鍾的 TimeEvaluator。 這樣,只要每 5 分鍾不超過 200 條日志(我的緩沖區大小),就不會丟棄任何日志,並且對性能的影響保持在較低水平。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM