如何关闭 .NET Core 日志记录到 AWS CloudWatch 中的日志级别和类别输出?

时间:2021-02-03 08:46:29

标签: c# amazon-web-services .net-core amazon-cloudwatch

我已设置我的 API 和控制台应用程序以通过 NuGet 包 Aws.Logging.AspNetCore 将日志发送到 CloudWatch。

我可以在 CloudWatch 中成功查看日志,但默认情况下它带有不需要的信息:

[Trace] Infra.AwsLogger: 
{
    "id": "AAA",
    "timestamp": "timestamp",
    "logLevel": "Trace",
    "message": "my message"
}

我不想要 [Trace] Infra.AwsLogger: 部分,我只想记录 JSON

{
    "id": "AAA",
    "timestamp": "timestamp",
    "logLevel": "Trace",
    "message": "my message"
}

这是我的记录器代码:

public class AwsLogger : IAwsLogger
{
        private readonly AwsLoggerOptions _awsLoggerOptions;
        private readonly LoggerFactory _logFactory;
        private ILogger _logger;

        public AwsLogger(IOptions<AwsLoggerOptions> awsLoggerOptions)
        {
            _awsLoggerOptions = awsLoggerOptions?.Value;

            var loggerConfig = new AWSLoggerConfig
            {
                LogGroup = _awsLoggerOptions?.LogGroup,
                Region = _awsLoggerOptions?.Region
            };

            _logFactory = new LoggerFactory();
            _logFactory.AddAWSProvider(loggerConfig);
        }

        public void Log(LogMessage message, LogLevel logLevel)
        {
            _logger = _logFactory.CreateLogger<AwsLogger>();

            logMessage.LogLevel = logLevel;

            var logMessageString = JsonConvert.SerializeObject(message);

            switch (logLevel)
            {
                case Information:
                    _logger.LogInformation(logMessageString);
                    break;
                case .Warning:
                    _logger.LogWarning(logMessageString);
                    break;
                case Error:
                    _logger.LogError(logMessageString);
                    break;
                case Trace:
                    _logger.LogTrace(logMessageString);
                    break;
                case Debug:
                    _logger.LogDebug(logMessageString);
                    break;
                default:
                    _logger.LogInformation(logMessageString);
                    break;
            }
        }
}

这是我的应用设置:

  "Logging": {
    "IncludeLogLevel": false,
    "IncludeCategory": false,
    "IncludeNewline": false,
    "IncludeException": false,
    "IncludeEventId": false,
    "IncludeScopes": false,
    "Region": "region",
    "LogGroup": "loggroup",
    "LogLevel": {
      "Default": "Trace",
      "System": "Information",
      "Microsoft": "Information"
    }
  }

我怎样才能实现我想要的?

1 个答案:

答案 0 :(得分:0)

您所需要的只是结构化日志记录。 Serilog 是一种结构化日志框架。您可以使用 AWS.Logger.SeriLog nuget 包将结构化日志推送到 AWS。

您可以使用以下参考来配置一个。

https://github.com/aws/aws-logging-dotnet#aspnet-core-logging

https://github.com/serilog/serilog/wiki/Configuration-Basics

对于 Json 格式,您可以使用“Serilog.Formatting.Json.JsonFormatter, Serilog”格式器。