Akka.NET 1.5中GetLogger()调用ForContext无法添加日志额外属性
Akka.NET 1.5 无需显式引用SerilogLoggingAdapter使用ForContext的解决方案
问题背景
在Akka.NET 1.5版本中,按照官方文档建议使用Context.GetLogger()替代Context.GetLogger<SerilogLoggingAdapter>()添加日志上下文属性时,发现ForContext()设置的属性无法显示;只有显式指定SerilogLoggingAdapter泛型参数的旧方式才能正常输出上下文属性。
原因分析
- 版本兼容性问题:你的
Akka.Logger.Serilog版本(1.5.12.1)与Akka核心版本(1.5.19)不一致,导致针对Akka.Event.ILogger的ForContext扩展方法无法正确工作。 - 扩展方法未正确引用:若未在代码中引入
Akka.Logger.Serilog命名空间,Akka.Event.ILogger无法识别ForContext扩展方法,可能误调用其他组件的同名方法导致失效。
解决方案
1. 对齐Akka与日志适配器版本
将Akka.Logger.Serilog版本升级至与Akka核心版本一致(即1.5.19),确保组件间兼容性。更新后的包引用如下:
<ItemGroup> <PackageReference Include="Akka" Version="1.5.19" /> <PackageReference Include="Akka.Logger.Serilog" Version="1.5.19" /> <PackageReference Include="Serilog" Version="3.1.1" /> <PackageReference Include="Serilog.Sinks.Console" Version="5.0.1" /> </ItemGroup>
2. 确保引用正确的命名空间
在Actor类文件顶部添加Akka.Logger.Serilog命名空间,使Akka.Event.ILogger能够使用Serilog提供的ForContext扩展方法:
using Akka.Logger.Serilog;
3. 使用扩展方法简化调用
完成上述两步后,即可直接通过Context.GetLogger()调用ForContext,无需显式指定SerilogLoggingAdapter:
Context.GetLogger() .ForContext("FromContextProperty", "bbb") .Error("NEW WAY {FromMessageProperty}", txt);
验证结果
更新后运行代码,两种日志输出方式均能正确显示FromContextProperty属性,与预期一致。
内容的提问来源于stack exchange,提问作者Ilya Tchivilev
相关产品推荐
相关产品推荐

