首页 > 解决方案 > 带有 Serilog 控制台接收器的 Cloudwatch 显示在带有 dotnet lambda 的单个 cloudwatch 条目中

问题描述

我正在尝试使用 Serilog 控制台接收器写入 cloudwatch。然而,当使用 Log.Information 或 Log.Error 时,它们作为一个条目出现在 cloudwatch 中。

此外,异常跟踪将显示为单独的条目。我已经尝试更改输出模板,但这对于 serilog 配置的信息不起作用

"Serilog": {
"Using": [ "Serilog.Sinks.Console" ],
"MinimumLevel": "Information",
"WriteTo": [
  {
    "Name": "Console",
    "Args": {
      "outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] <{SourceContext}> {Message:lj}\r{Exception}"
    }
  }
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ]

}

同一 cloudwatch 日志事件中的 Serilog 日志条目

标签: .net-coreaws-lambdaamazon-cloudwatchserilog

解决方案


TL;博士; 不要为此使用控制台接收器。请改用AWS.Logger.SeriLog 接收器。


控制台接收器不是这项工作的正确工具,您目前并没有真正将日志发送到 CloudWatch……您只是在发送文本。您正在将文本写入控制台,原始控制台输出正在被您的环境捕获,然后在写入输出流时作为文本转发到 ClowdWatch...

为了正确地将 Serilog 日志发送到 AWS CloudWatch,您需要使用将日志直接写入 AWS CloudWatch 的接收器,例如AWS 支持的官方接收器AWS.Logger.SeriLog 。

AWSLoggerConfig configuration = new AWSLoggerConfig("Serilog.ConfigExample");
configuration.Region = "us-east-1";

Log.Logger = new LoggerConfiguration()
    .WriteTo.AWSSeriLog(configuration)
    .CreateLogger();

源代码仓库是https://github.com/aws/aws-logging-dotnet#serilog并且在https://github.com/aws/aws-logging-dotnet/tree/master/samples/ 上有使用示例Serilog


推荐阅读