我已设置我的 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"
}
}
我怎样才能实现我想要的?
答案 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”格式器。