![](/img/trans.png)
[英]How to query AWS CloudWatch logs using AWS CloudWatch Insights?
[英]How to log library logs to AWS CloudWatch using Serilog?
目前,我正在研究 ASP.NET 6 Web API 并作为记录器,我们使用 Serilog 将所有必要的详细信息记录到 cloudwatch,它工作正常。 现在我需要将诸如 AWS 错误之类的库日志添加到 cloudwatch。 目前在配置文件中有一个选项,但它只将日志保存为文件,导致设备上没有剩余空间:'/app/Logs/serilog-aws-errors.txt'并且文件中的详细信息没有出现在 cloudwatch 日志中。
这是我使用的 appsettings 数据,
"Serilog": {
"Using": [ "AWS.Logger.SeriLog", "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
"MinimumLevel": "Debug",
"WriteTo": [
{ "Name": "AWSSeriLog" },
{ "Name": "Console" },
{
"Name": "File",
"Args": {
"path": "Logs/webapi-.txt",
"rollingInterval": "Day"
}
}
],
"Region": "eu-west-2",
"LogGroup": "/development/serilog",
"LibraryLogFileName": "Logs/serilog-aws-errors.txt"
}
我需要知道有一种方法可以将 serilog-aws-errors.txt 中的详细信息记录到 AWS cloudwatch 或 S3 存储桶。
这在很大程度上取决于您尝试在 AWS 中部署服务的位置。 在 ECS 或 Fargate 中,您可以直接登录到控制台。 这将是容器定义的一个片段:
"containerDefinitions": [
{
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/dev/ecs/my-api-logs-here",
"awslogs-region": "us-east-1",
"awslogs-stream-prefix": "ecs"
}
},
使用上面的配置,您只需要Serilog.Sinks.Console
并且所有内容都将在没有特殊 AWS 接收器的情况下记录。 要写入控制台,您可以使用
loggerConfiguration.WriteTo.Async(a =>
{
a.Console(new JsonFormatter());
});
当部署到 Fargate 或 ECS 时,这些控制台日志将出现在您的 CloudWatch 日志中。 不需要额外的水槽。 Lambda 日志具有类似的设置。 有关更多详细信息,请参阅: https://docs.aws.amazon.com/lambda/latest/dg/csharp-logging.html 。
如果您想使用Serilog.Sinks.AwsCloudWatch
,它确实有一些不错的功能,但设置略有不同。 您可能根本不想登录到控制台或文件接收器。 相反,您只需直接登录到 CloudWatch。 您需要根据 Github 上的说明进行设置: https://github.com/Cimpress-MCP/serilog-sinks-awscloudwatch 。 您可以在本地环境中启动并运行它,然后以仅在部署到 AWS 时运行的方式设置您的应用程序设置,并且在本地您仍然使用控制台或文件设置。
var options = new CloudWatchSinkOptions
{
// the name of the CloudWatch Log group for logging
LogGroupName = logGroupName,
// the main formatter of the log event
TextFormatter = formatter,
// other defaults defaults
MinimumLogEventLevel = LogEventLevel.Information,
BatchSizeLimit = 100,
QueueSizeLimit = 10000,
Period = TimeSpan.FromSeconds(10),
CreateLogGroup = true,
LogStreamNameProvider = new DefaultLogStreamProvider(),
RetryAttempts = 5
};
// setup AWS CloudWatch client
var client = new AmazonCloudWatchLogsClient(myAwsRegion);
// Attach the sink to the logger configuration
Log.Logger = new LoggerConfiguration()
.WriteTo.AmazonCloudWatch(options, client)
.CreateLogger();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.