如何使用 json 配置 Serilog 日志到 Cloudwatch

How to Configure Serilog Logging to Cloudwatch using json

我想通过 json 配置将 Serilog 日志记录配置到云监视。我有一个简单的 WPF 应用程序和 Serilog 记录器包装器 class。但是当我 运行 时,应用程序不会记录到 cloudwatch 日志。如果您能指导我如何存储 AWS 凭据并将其传递给 Logger Coniguration,我将不胜感激。

下面是我的 Serilog 包装器 class,

public class SerilogLogger : ILog
{
    private readonly ILogger _logger;

    public SerilogLogger(IConfiguration configuration)
    {
        _logger = new LoggerConfiguration()
            .ReadFrom.Configuration(configuration)
            .CreateLogger();
        Log.Logger = _logger;
    }

    public void Debug(string format, params object[] args)
    {
        _logger.Debug(format, args);
    }

    public void Error(Exception ex)
    {
        _logger.Error(ex,"Error");
    }

    public void Error(Exception ex, string format, params object[] args)
    {
        _logger.Error(ex, format, args);
    }

    public void Fatal(Exception ex, string format, params object[] args)
    {
        _logger.Fatal(ex, format, args);
    }

    public void Info(string format, params object[] args)
    {
        _logger.Information(format,args);
    }

    public void Trace(string format, params object[] args)
    {
        _logger.Verbose(format, args);
    }

    public void Warn(string format, params object[] args)
    {
        _logger.Warning(format,args);
    }

    public void Close()
    {
        Log.CloseAndFlush();
    }
}

包装器是从我的启动页面调用的,

private readonly ILog _logger;
    private int _count = 0;
    public MainWindow()
    {
        InitializeComponent();
        var configuration = new ConfigurationBuilder()
            .AddJsonFile("SerilogConfig.json")
            .Build();
        _logger = new SerilogLogger(configuration);
        _logger.Info("Click count is {0}", _count += 1);
    }

我有 SerilogConfig.json 文件,

{
  "Serilog": {
    "Using": [ "Serilog.Sinks.File", "AWS.Logger.SeriLog" ],
    "MinimumLevel": "Verbose",
    "Region": "us-east-2",
    "LogGroup": "Petnet-Olympus-Serilog",
    "Enrich": [ "FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId", "WithExceptionDetails", "WithAssemblyName", "WithAssemblyVersion" ],
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "logs/Olympus_Serilog_.txt",
          "rollingInterval": "Day",
          "outputTemplate": "{Timestamp:o} [{Level}] ({MachineName}/{AssemblyName}-{AssemblyVersion}/{ThreadId}) {Message}{NewLine}{Exception}"
        }
      },
      {
        "Name": "File",
        "Args": {
          "path": "logs/Olympus_Serilog_.json",
          "rollingInterval": "Day",
          "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog"
        }
      },
      {
        "Name": "AWSSeriLog"
      }
    ]
  }
}

我无法在 Cloudwatch 中进行日志记录,还想知道必须如何保存 AWS 凭据以及记录器如何读取凭据。

安装 AWS SDK。

然后在 VS 中,转到 AWS Explorer,您应该可以从那里配置凭据。

使用有效凭据在特定位置创建 aws 凭据文件,并在 app.config、

中指定相同文件
<appSettings>
<!-- AWS -->
<add key="AWSProfilesLocation" value="D:\awscredentials" />
</appSettings>

我的 SerilogConfig.json 如下所示,

{
  "Serilog": {
    "Using": [ "Serilog.Sinks.File", "AWS.Logger.SeriLog" ],
    "MinimumLevel": "Verbose",
    "Enrich": [ "WithMachineName", "FromLogContext", "WithExceptionDetails", "WithAssemblyInformationalVersion" ],
    "Properties": {
      "Application": "App"
    },
    "Region": "us-east-1",
    "Profile": "serilog",
    "LogGroup": "CloudGroup-Client",
    "LibraryLogFileName": "serilog-aws-errors.txt",
    "LogLevel": {
      "Default": "Information",
      "System": "Information",
      "Microsoft": "Information"
    },
    "WriteTo": [
      {
        "Name": "AWSSeriLog",
        "Args": {
          "textFormatter": "Serilog.Formatting.Json.JsonFormatter, Serilog"
        }
      }
    ]
  }
}