.net-core - 带有 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" ]
}
解决方案
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
推荐阅读
- python - pySerial in_wating 在 mac Mojave 上一直是 1020 并且读数充满了垃圾和以前的数据
- python - 获取python中日期范围之间的所有奇数天
- javascript - google.script.run 返回未定义的数组
- angular - Angular Material=> Mat-chip- Autocomplete(input) 通过空格键选择下拉菜单
- python - Python Numpy 初学者:获取形状为 ((M,N),(M,N)) 的数组
- reactjs - 在 ReactJS 中没有渲染方法的渲染组件
- regex - 带有条件和后缀的正则表达式
- javascript - JS:使用字典比遍历数组更快吗?
- android - 当应用程序的多个页面在 Kotlin 中具有相同的 Activity 名称时,如何启动 Android Activity?
- etl - Source 和 Source Qualifier 之间的字段顺序需要相同吗?