1

所以我添加了用于日志记录的 serilog 我在本地使用它来登录文件,但我想使用 serilog 更新 AWS 云手表上的日志或在云手表上添加一个日志组,但我不知道在哪里添加秘密和密钥或如何配置 serilog 以使用它们,我应该将它们添加为环境变量吗?最佳做法是什么?

启动

app.UseSerilogRequestLogging();

appsettings.Develppment.json

 "Serilog": {
    "Using": [ "Serilog.Sinks.File", "AWS.Logger.SeriLog" ],
    "Region": "us-west-2",
    "LogGroup": "AWS:Cloudwatch:LogGroup",
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "Enrich": [ "FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId" ],
    "WriteTo": [
      {
        "Name": "RollingFile",
        "Args": {
          "pathFormat": "logs/logs_{Date}.json",
          "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog"
        }
      },
      {
        "Name": "File",
        "Args": {
          "path": "logs/Test.txt",
          "outputTemplate": "{Timestamp:G} {Message}{NewLine:1}{Exception:1}"
        }
      },
      {
        "Name": "File",
        "Args": {
          "path": "logs/Test.json",
          //"outputTemplate": "{Timestamp:G} {Message}{NewLine:1}{Exception:1}",
          "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss}|{Level} => CorrelationID:{CorrelationID} => RequestId:{RequestId} => RequestPath:{RequestPath} => {SourceContext}{NewLine}    {Message}{NewLine}{Exception}",
          "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog"
        }
      }
    ]
  }

程序

 public static void Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration()
                .ReadFrom.Configuration(Configuration)
                .Enrich.WithProperty("App Name", "example")
                .CreateLogger();

            try
            {
                Log.Information("Starting host");
                CreateHostBuilder(args).Build().Run();
            }
            catch (Exception ex)
            {
                Log.Fatal(ex, "Host terminated unexpectedly");
            }
            finally
            {
                Log.CloseAndFlush();
            }

        }
        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .UseSerilog()
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });

        private static IConfiguration Configuration { get; } = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.Development.json", optional: true, reloadOnChange: true)
            .AddEnvironmentVariables()
            .Build();
    }
4

1 回答 1

1

我不知道如何将下面的配置添加到 appettins.json 文件中,但你在这里:

//...

using Amazon.Runtime;
using AWS.Logger;
using AWS.Logger.SeriLog;
using Microsoft.Extensions.Configuration;
using Serilog;
using Serilog.Context;
using Serilog.Formatting.Json;

// ...

// create a config object from the appsettings.json file
private static IConfiguration Configuration { get; set; } = new 
    ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .AddEnvironmentVariables()
    .Build();

// ...

// you can get these configs from your appsettings.json
var awsS3sKey = Configuration["aws:access.key"];
var awsS3Secret = Configuration["aws:secret.key"];
var logGroupName = Configuration["aws:log.group.name"];
var region = Configuration["aws:log.region"];

// create your AWS credential
var credentials = new BasicAWSCredentials(awsS3sKey, awsS3Secret);

// create a logger for AWS Cloudwatch
var awsConfiguration = new AWSLoggerConfig
{
    Region = region,
    LogGroup = logGroupName,
    Credentials = credentials
};

// create a serilog config
var config = new LoggerConfiguration()
    .ReadFrom.Configuration(Configuration)
    .WriteTo.AWSSeriLog(awsConfiguration, null, new JsonFormatter());

// logger is ready
Log.Logger = config.CreateLogger();

// ...

如果您知道如何将这些设置添加到 appsettings 文件中,请告诉我。

顺便说一句,我在下面使用这些 nuget 包:

  • AWS.Logger.SeriLog
  • Microsoft.Extensions.Configuration
  • Microsoft.Extensions.Configuration.EnvironmentVariables
  • Microsoft.Extensions.Configuration.FileExtensions
  • Microsoft.Extensions.Configuration.Json
  • Microsoft.Extensions.Logging
  • Serilog
  • Serilog.Enrichers.Context
  • Serilog.Extensions.Logging
  • Serilog.设置.配置
  • Serilog.Sinks.Console
  • Serilog.Sinks.文件
于 2021-11-12T09:23:58.687 回答