如何将.NET高性能日志记录LoggerMessage与Serilog高级解构结合使用?

问题描述 投票:0回答:1

注意:我使用的是.NET 8和

Microsoft.Extensions.Telemetry.Abstractions
,所以
LoggerMessageAttribute
触发的源生成器与旧的不一样...

我的目标是获得.NET高性能日志记录的好处,并使用Serilog的高级解构功能来增强日志结构。

(一个有效的答案可能是,同时满足这两个要求是不可能的,并且 Serilog 解构不适合高性能场景,但是在这种情况下,问题是:我们能否使其可配置哪个需求想要我优先考虑使用相同的代码库,而不是重写数以万计的日志代码行)

所以代替:

    // Serilog automatically and in a configurable way destructures forecast
    _logger.LogInformation("Generated forecast {@forecast}", forecast);    

我有以下方法:

    [LoggerMessage(Level = LogLevel.Information, Message = "Generated {@forecast} forecast")]
    public partial void GeneratedForecast(ILogger logger, WeatherForecast forecast);

给出了源生成器错误消息:

Error   LOGGEN031   Logging method "GeneratedForecast" has template(s) that start with "@": 

显然这是被禁止的,错误消息中没有进一步的推理。

我在这里缺少什么?我是否正在尝试做一些本质上不可能的事情?

(我确实知道

[LogProperties]
[TagProvider]
属性,但解构能力有限。)

asp.net-core .net-core logging serilog
1个回答
0
投票

看起来它有自己的硬连线“解构”,而且还不能互操作;安德鲁·洛克 (Andrew Lock) 本系列的详细信息:

© www.soinside.com 2019 - 2024. All rights reserved.