如何配置 Serilog 接收器以登录到 CloudWatch [英] How to configure a Serilog sink for logging to CloudWatch
问题描述
如果您能在使用 .NET Core 为 AWS CloudWatch 设置 Serilog 接收器方面得到一些指导,我将不胜感激.我正在使用 appsettings.json 进行配置,但我无法将设置放入记录器中.尝试将日志信息写入 CloudWatch 时出现此错误:
I would appreciate some guidance in setting up a Serilog sink for AWS CloudWatch with .NET Core. I'm using appsettings.json for configuration but I am unable to put the settings in the logger. When trying to write log information to CloudWatch this error appears:
An error occurred while starting the application.
AmazonClientException: No RegionEndpoint or ServiceURL configured
Amazon.Runtime.ClientConfig.Validate() in ClientConfig.cs, line 446
AmazonClientException: No RegionEndpoint or ServiceURL configured
Amazon.Runtime.ClientConfig.Validate() in ClientConfig.cs
Amazon.Runtime.AmazonServiceClient..ctor(AWSCredentials credentials, ClientConfig config) in AmazonServiceClient.cs
AWS.Logger.Core.AWSLoggerCore..ctor(AWSLoggerConfig config, string logType) in AWSLoggerCore.cs
AWS.Logger.SeriLog.AWSSink..ctor(AWSLoggerConfig loggerConfiguration, IFormatProvider iFormatProvider, ITextFormatter textFormatter) in AWSSink.cs
AWS.Logger.SeriLog.AWSLoggerSeriLogExtension.AWSSeriLog(LoggerSinkConfiguration loggerConfiguration, IConfiguration configuration, IFormatProvider iFormatProvider, ITextFormatter textFormatter) in AWSLoggerSeriLogExtension.cs
...
Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder app)
Microsoft.Extensions.DependencyInjection.IServiceCollectionExtensions+InjectApiVersionRoutePolicy+<>c__DisplayClass2_0.<Configure>b__0(IApplicationBuilder app)
Microsoft.AspNetCore.Server.IISIntegration.IISSetupFilter+<>c__DisplayClass4_0.<Configure>b__0(IApplicationBuilder app)
Microsoft.AspNetCore.HostFilteringStartupFilter+<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder app)
Microsoft.AspNetCore.Hosting.Internal.AutoRequestServicesStartupFilter+<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder builder)
Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
我的代码如下:
在 Startup.cs 中:
In Startup.cs:
public Startup(IHostingEnvironment env)
{
Configuration = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json")
.AddEnvironmentVariables()
.Build();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(Configuration.GetSection("AWS.Logging"))
.WriteTo.AWSSeriLog(Configuration)
.CreateLogger();
app.UseMvc();
}
我的 appsettings.json:
My appsettings.json:
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AWS.Logging": {
"Region": "eu-west-1",
"LogGroup": "MyLogGroup",
"LogLevel": {
"Default": "Information",
"System": "Information",
"Microsoft": "Information"
}
},
"AllowedHosts": "*"
}
我的开发人员机器上的 AWS 凭证是使用环境变量设置的:
Credentials for AWS from my developer machine are set by using environment variables:
AWS_ACCESS_KEY_ID=xxxxxxxxxx
AWS_DEFAULT_REGION=eu-west-1
AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxx
推荐答案
以防万一有人遇到同样的问题,这个 appsettings.json 解决了它:
Just in case anyone has the same problem, this appsettings.json solved it:
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"Serilog": {
"Using": [ "AWS.Logger.SeriLog" ]
"Region": "eu-west-1",
"LogGroup": "MyLogGroup",
"LogLevel": {
"Default": "Information",
"System": "Information",
"Microsoft": "Information"
}
},
"AllowedHosts": "*"
}
这篇关于如何配置 Serilog 接收器以登录到 CloudWatch的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!