LoggerMessage 字符串插值不起作用 - NLOG 和 Azure table 存储

LoggerMessage string interpolation is not working - NLOG & Azure table storage

我正在使用 Nlog 和 Azure table 存储,我的日志写入 (LoggerExtensions.cs) 如下所示。

TestMessageAction = LoggerMessage.Define<string>(
            LogLevel.Error,
            new EventId(1000, nameof(TestMessage)),
            "Test Error Message (Key = {key})");

public static void TestMessage(this ILogger logger, string key, Exception ex)
    {
        TestMessageAction(logger, key, ex);
    }

如果目标是文件或数据库,这可以正常工作。在 azure table 存储中无法正常工作。

示例:

对于上面的相同代码,我在下面的文件中看到

Test Error Message (Key = ef5bbee2-ac68-4dee-8497-54d5d9691a92)

但在 Azure table 存储中

Test Error Message (Key = key)

和 Azure table 存储的 Nlog 目标:Nlog.config

<target xsi:type="AzureTableStorage"
        name="NLogAzureTable"
        layout="${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|${message} ${exception}"
        connectionString="******"
        tableName="ServiceLogs"
        logTimeStampFormat="O" />

 <rules>
<logger name="*" minlevel="Info" writeTo="NLogAzureTable"></logger>
 </rules>

如果我不使用 LoggerMessage,Azure 日志看起来还不错。

_logger.LogInfo($"Test Info : {key}");


测试信息:ef5bbee2-ac68-4dee-8497-54d5d9691a92

请让我知道我在这里遗漏了什么。

谢谢。

不确定这是否是一个错误,但你可以在这里看到:

https://github.com/JDetmar/NLog.Extensions.AzureStorage/blob/6ed03bfa183b231dffeb3733b912c87fe8efc6f6/src/NLog.Extensions.AzureStorage/NLogEntity.cs#L24

然后它会这样做:

Message = logEvent.Message;

而不是这个:

Message = logEvent.FormattedMessage;

您应该会看到 FullMessage 包含正确的格式。

也许创建一个问题并询问项目的维护者:https://github.com/JDetmar/NLog.Extensions.AzureStorage/issues