如何在ASP.NET Core 2.0 Razor Pages应用中配置AWS ASP.NET Core日志?
嗨,我来帮你搞定ASP.NET Core 2.0 Razor Pages里用AWS.Logger.AspNetCore的配置,还有怎么把日志注入到页面后台代码里:
1. 先配置appsettings.json
和官网的1.0示例差不多,直接在appsettings.json里保留AWS日志的配置节点就行,你可以根据自己的需求修改区域和日志组名称:
"AWS.Logging": { "Region": "us-east-1", "LogGroup": "AspNetCore.RazorPagesSample", "LogLevel": { "Default": "Debug", "System": "Information", "Microsoft": "Information" } }
如果有环境特定的配置文件(比如appsettings.Development.json),也可以在里面覆盖这个节点的内容,方便不同环境用不同的日志配置。
2. Startup.cs(或Program.cs)中的AWS日志提供配置
ASP.NET Core 2.0和1.0的日志配置方式有变化,不再直接在Configure方法里用ILoggerFactory加提供程序,推荐两种更符合2.0设计的方式:
方式一:在Program.cs里配置(更推荐)
2.0的默认模板里,Program.cs是应用入口,你可以在BuildWebHost方法中通过ConfigureLogging来添加AWS日志提供程序:
public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .ConfigureLogging((hostingContext, logging) => { // 从配置中读取AWS.Logging节点,添加AWS日志提供程序 logging.AddAWSProvider(hostingContext.Configuration.GetAWSLoggingConfigSection()); // 保留默认的控制台、Debug日志提供程序(可选,根据需要取舍) logging.AddConsole(); logging.AddDebug(); }) .UseStartup<Startup>() .Build();
方式二:在Startup.cs里配置
如果你更习惯在Startup里处理所有服务配置,可以在ConfigureServices方法中添加:
public void ConfigureServices(IServiceCollection services) { services.AddLogging(loggingBuilder => { loggingBuilder.AddAWSProvider(Configuration.GetAWSLoggingConfigSection()); loggingBuilder.AddConsole(); loggingBuilder.AddDebug(); }); // 别忘了添加Razor Pages所需的服务(2.0里是通过AddMvc来集成) services.AddMvc(); }
3. 把日志注入到Razor Pages后台(.cshtml.cs)
这一步很简单,直接用构造函数注入ILogger<你的页面模型类>就行,和MVC控制器的注入逻辑一样:
比如你的Index.cshtml.cs后台代码:
using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; public class IndexModel : PageModel { private readonly ILogger<IndexModel> _logger; // 通过构造函数注入ILogger实例 public IndexModel(ILogger<IndexModel> logger) { _logger = logger; } public void OnGet() { // 现在就可以正常使用日志了 _logger.LogInformation("Index页面被访问啦!"); _logger.LogDebug("这是一条Debug级别的测试日志"); } }
这样当页面执行OnGet方法时,日志就会自动发送到AWS CloudWatch Logs的指定日志组里了。
额外小提示
- 确保已经通过NuGet安装了
AWS.Logger.AspNetCore包,用命令行的话就是:Install-Package AWS.Logger.AspNetCore - 应用需要有AWS的权限才能写入CloudWatch Logs,本地开发可以通过
~/.aws/credentials文件配置,部署到AWS的话可以用EC2实例角色或者EKS服务账户等方式 - 如果日志没正常出现,先检查区域是否正确、日志组是否存在(SDK会自动创建,但需要权限),还有日志级别是否匹配你在appsettings里的配置
内容的提问来源于stack exchange,提问作者VinceL
相关产品推荐
相关产品推荐

