簡體   English   中英

如何關閉日志級別和類別 output 中的 .NET Core 日志記錄到 AWS CloudWatch?

[英]How can I turn off log level & category output in .NET Core logging to AWS CloudWatch?

我已經設置了我的 API 和控制台應用程序,以通過 NuGet package Aws.Logging.AspNetCore 將日志發送到Aws.Logging.AspNetCore

我可以在 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"
    }
  }

我怎樣才能達到我想要的?

您所需要的只是結構化日志記錄。 Serilog 是一種結構化的日志框架。 您可以使用 AWS.Logger.SeriLog nuget package 將結構化日志推送到 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”格式化程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM