ASP.NET/logging
< ASP.NET
以ASP.NET MVC Core为例。
在Program.cs中,
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
CreateDefaultBuilder的源代码已经做了(即内建了):
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddConsole();
logging.AddDebug();
logging.AddEventSourceLogger();
}).
所以不需要手工定义providers。如果想使用别的providers,需要如此:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logBuilder =>
{
logBuilder.ClearProviders(); // removes all providers from LoggerFactory
logBuilder.AddConsole();
logBuilder.AddTraceSource("Information, ActivityTracing"); // Add Trace listener provider
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
如果记日志到文件中,需要安装nuget包 Serilog.Extensions.Logging.File
然后在Startup.cs中,增加:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
// other code remove for clarity
loggerFactory.AddFile("Logs/mylog-{Date}.txt");
}
以HomeController为例,如下记日志:
namespace AspDotNetCoreMvcApp.Controllers
{
public class HomeController : Controller
{
private readonly ILogger _logger;
public HomeController(ILogger<HomeController> logger){
_logger = logger;
}
public IActionResult Index()
{
_logger.LogInformation("Log message in the Index() method");
return View();
}
public IActionResult About()
{
_logger.LogInformation("Log message in the About() method");
return View();
}
}
}
Microsoft.Extensions.Logging命名空间定义了日志级别和扩展方法:
枚举名字 | 枚举值 | ILogger扩展方法 |
---|---|---|
Trace | 0 | LogTrace |
Debug | 1 | LogDebug |
Information | 2 | LogInformation |
Warning | 3 | LogWarning |
Error | 4 | LogError |
Critical | 5 | LogCritical |
None | 6 |
在appsettings.json中,可定义日志的级别:
// appsettings.json
{
"Logging": {
"LogLevel": { // All providers
"Default": "Information",
"Microsoft": "Warning"
}
"Console": {
"LogLevel": { // Console provider
"Default": "Information", // Overrides preceding LogLevel:Default setting.
"Microsoft": "Trace" // Writes at Trace Level inside the Microsoft assembly
}
}
}
}