You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Akka .Net 1.5后Serilog语义日志属性丢失问题

问题排查与修复:Akka.NET 1.5升级后Serilog语义属性丢失

核心问题分析

从配置和代码来看,问题出在日志适配器的使用方式以及Akka.NET与Serilog集成的版本兼容性上,导致日志模板中的语义属性无法被正确解析和传递。

修复步骤

1. 对齐Akka.NET与Akka.Logger.Serilog版本

确保Akka和Akka.Logger.Serilog的NuGet包版本完全一致(均为1.5.x系列)。版本不匹配会导致日志集成模块无法正确处理语义属性,这是Akka.NET 1.5升级后常见的兼容性问题。

2. 修正Actor中日志器的获取方式

你当前手动指定了SerilogLoggingAdapter泛型参数,这会绕过Akka.NET根据HOCON配置自动注入的日志器逻辑,导致语义属性丢失。修改代码如下:

原代码:

private readonly ILoggingAdapter _logger = Context.GetLogger<SerilogLoggingAdapter>();

修改为:

private readonly ILoggingAdapter _logger = Context.GetLogger();

Akka.NET会根据HOCON中配置的loggers自动使用SerilogLogger对应的适配器,无需手动指定类型。

3. 确保Serilog初始化在ActorSystem启动之前

必须在创建ActorSystem实例前完成Log.Logger的初始化,否则Akka.NET会创建一个默认的Serilog实例,与你自定义配置的实例不关联,导致语义属性无法传递到Application Insights。示例代码顺序:

// 优先初始化Serilog
var serilogConfig = new LoggerConfiguration()
    .WriteTo.ApplicationInsightsTelemetrySink("<你的Instrumentation Key>")
    // 其他Serilog配置项
    .CreateLogger();
Log.Logger = serilogConfig;

// 再创建ActorSystem
var actorSystem = ActorSystem.Create("my-actor-system");

4. 验证HOCON配置有效性

你的HOCON配置本身是正确的,但需确保没有其他配置项覆盖logger-formatter:

akka {
    loglevel=INFO
    log-dead-letters = off
    log-dead-letters-during-shutdown = off

    loggers=["Akka.Logger.Serilog.SerilogLogger, Akka.Logger.Serilog"]
    logger-formatter="Akka.Logger.Serilog.SerilogLogMessageFormatter, Akka.Logger.Serilog"
    actor {
        ask-timeout = 60s
    }
}

SerilogLogMessageFormatter负责将Akka的日志模板转换为Serilog可识别的语义格式,无需修改。

验证修复效果

修复后,日志输出的properties节点应包含MyExtraPropName属性,类似如下结构:

{
    "name": "AppTraces",
    "time": "2023-05-11T09:01:21.9089715Z",
    "data": {
        "baseType": "MessageData",
        "baseData": {
            "ver": 2,
            "message": "Doing a thing on a log \"MyExtraPropValue\"",
            "severityLevel": "Information",
            "properties": {
                "LogSource": "[akka://my-actor-system/user/my-actor#1234344381]",
                "Timestamp": "2023-05-11T09:01:21.9089046Z",
                "Message": "Doing a thing on a log \"MyExtraPropValue\"",
                "Thread": "0044",
                "SourceContext": "MyProject.MyActorClass",
                "MessageTemplate": "Doing a thing on a log '{MyExtraPropName}'",
                "ActorPath": "akka://my-actor-system/user/my-actor",
                "MyExtraPropName": "MyExtraPropValue"
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者Tjaart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 15:55:33