【发布时间】:2021-01-15 16:36:33
【问题描述】:
我使用 Serilog 异步日志记录,在对多个用户进行性能测试时,我们发现 serilog 占用了所有 CPU(高达 100%)。 ASP.net 代码使用 Serilog Async(log.info、log.warning、log.error)创建日志文件,并且由于安全日志记录要求,它在所有网页上都有日志记录。 CPU 使用率在 2 小时后达到峰值,并且持续保持 100%,系统性能受到严重影响。
我们还测试了未启用 SeriLog 的应用程序,该应用程序的 CPU 使用率不会达到 100%。
如果我能在这里得到任何帮助,我将不胜感激。如果需要,我可以共享我创建的代码(记录器类)。
以及如何配置日志记录:
var logConfig = new LoggerConfiguration()
.MinimumLevel.Information()
.WriteTo.Async(logSink =>
{
logSink.File(
logFilePath,
rollingInterval: RollingInterval.Day,
retainedFileCountLimit: null,
outputTemplate: OutputTemplate,
hooks: new HeaderWriter(header),
flushToDiskInterval: TimeSpan.FromSeconds(10),
shared: true
);
});
Log.Logger = logConfig.CreateLogger();
【问题讨论】:
-
您能分享您的记录器配置吗?我还建议查看 serilog 的 SelfLog。是否有任何错误消息?
-
@Tolyandre 感谢您的输入。我已按要求将配置添加到帖子中。
-
“我们还测试了没有 Serilog 登录文件的应用程序,系统正在运行完整的文件,没有 CPU 峰值,因此它必须使用 Serilog 异步进行一些操作。”这甚至意味着什么?
-
@IanKemp 我的意思是当 SeriLog 被禁用时,应用程序的 CPU 使用率不会达到 100%。
-
@IanKemp 这是从少量输入中得出的大量推论;)异步接收器不会以这种方式诱导并行性
标签: c# asynchronous serilog