【发布时间】:2020-03-28 08:31:29
【问题描述】:
我在我的 C# webAPI 中使用 Log4net ElasticSearchAppender,BufferSize 的 10 和 Lossy 设置为 true 以保持性能,如下所示:
https://github.com/bruno-garcia/log4net.ElasticSearch/wiki/02-Appender-Settings
<lossy value="false"/>Log4net.ElasticSearch 使用缓冲区收集 事件,然后在后台将它们刷新到 Elasticsearch 服务器 线。将此值设置为 true 将导致 log4net.Elasticsearch 如果缓冲区已满且尚未完成,则开始丢弃事件 酡。如果 Elasticsearch 服务器变为 无响应或离线。
我还将评估器设置为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(评估程序)触发的刷新工作正常,但单独的 INFO 或 DEBUG 消息永远不会刷新到 Elastic,即使它们有 10、20 或 100 个。
在此配置中,缓冲区在满时不会刷新,它只是不断丢弃 DEBUG 或 INFO 日志,直到出现 ERROR,即使 Elastic 在线并且响应良好。
注意:我尝试将 lossy 设置为 false,缓冲区满时会刷新。但我担心这会严重损害我的应用程序响应能力。
我有什么问题吗? 有没有更好的方法来记录,同时最大限度地减少对性能的影响?
【问题讨论】:
标签: c# elasticsearch log4net log4net-configuration log4net-appender