下面是关于使用ASP.NET Core记录日志的完整攻略。
1. 理解ASP.NET Core中的日志记录
ASP.NET Core中内置了一个日志记录框架,可以很方便地在应用程序中记录日志。它支持输出到不同媒介,如控制台、文件、事件日志等,并支持不同的级别,如信息、警告、错误等。
常见的使用情况是将日志输出到文件中,以便于后续查阅。在ASP.NET Core中,我们可以通过扩展IServiceCollection类中的AddLogging方法来集成日志记录框架,并手动配置日志记录器。
2. 使用Serilog记录日志
Serilog是一款流行的.NET日志框架,支持多种日志数据源,并提供了一些有用的扩展功能。在ASP.NET Core中使用Serilog非常简单,只需要添加一个nuget包即可。
步骤一:安装Serilog及其扩展
在ASP.NET Core项目中,通过Nuget包管理器安装Serilog及其扩展,如下所示:
Install-Package Serilog
Install-Package Serilog.Enrichers.Environment
Install-Package Serilog.Settings.Configuration
Install-Package Serilog.Sinks.File
步骤二:在Startup.cs中配置Serilog
在Startup.cs文件中,我们需要添加如下代码:
using Serilog;
using Serilog.Formatting.Compact;
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
// 添加Serilog日志记录器
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(Configuration)
.CreateLogger();
// 注册日志记录器到服务容器中
services.AddLogging(loggingBuilder =>
{
loggingBuilder.ClearProviders();
loggingBuilder.AddSerilog();
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseSerilogRequestLogging();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
这个代码片段中,我们首先使用ReadFrom.Configuration方法读取appsettings.json文件中的日志配置。然后使用CreateLogger方法将其实例化,并把日志记录器注册到服务容器中,以便于后续的使用。
步骤三:在appsettings.json中配置日志输出
最后,需要在appsettings.json文件中添加Serilog的配置:
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
},
"WriteTo": [
{
"Name": "Console",
"Args": {
"outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} <{SourceContext}>{NewLine}{Exception}"
}
},
{
"Name": "File",
"Args": {
"path": "logs/log.txt",
"formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact",
"rollingInterval": "Day",
"retainedFileCountLimit": 7
}
}
]
}
上述代码片段的含义是,设置日志输出的最低级别为Information,同时设置了控制台和文件两个输出源并配置了输出模板和相关参数,这里我们使用前面添加的Serilog扩展中提供的CompactJsonFormatter,它可以将日志格式化为紧凑的JSON格式。
步骤四:添加日志记录
完成上述步骤,我们就可以在应用程序中使用Serilog来记录日志了,如下所示:
using Microsoft.Extensions.Logging;
public class SampleController : ControllerBase
{
private readonly ILogger<SampleController> _logger;
public SampleController(ILogger<SampleController> logger)
{
_logger = logger;
}
[HttpGet("test")]
public IActionResult Test()
{
_logger.LogInformation("This is a test log.");
return Ok();
}
}
在上述代码中,我们通过构造函数注入ILogger
3. 使用NLog记录日志
NLog是另一款流行的.NET日志框架,它也支持多种日志数据源,如文件、数据库等,并且提供了丰富的配置选项。
步骤一:安装NLog及其扩展
在ASP.NET Core项目中,通过Nuget包管理器安装NLog及其扩展,如下所示:
Install-Package NLog
Install-Package NLog.Extensions.Logging
步骤二:在Startup.cs中配置NLog
在Startup.cs文件中,我们需要添加如下代码:
using Microsoft.Extensions.Logging;
using NLog.Extensions.Logging;
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddSingleton<ILoggerFactory, LoggerFactory>();
services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
// 配置NLog
NLog.LogManager.LoadConfiguration("nlog.config");
app.AddNLogWeb();
}
}
在这个代码片段中,我们首先注入了ILoggerFactory和ILogger
步骤三:在nlog.config文件中配置NLog
最后,需要在nlog.config文件中配置NLog,定义日志输出源及其相关参数:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true"
internalLogLevel="Info"
internalLogFile="c:\temp\nlog-internal.log">
<targets>
<target name="console" xsi:type="ColoredConsole" layout="${longdate} ${uppercase:${level}} ${message} ${exception}" />
<target xsi:type="File" name="file" fileName="logs/nlog.log"
layout="${longdate} ${uppercase:${level}} ${message} ${exception}">
<acrhiveAboveSize>1024000</acrhiveAboveSize>
<maxArchiveFiles>10</maxArchiveFiles>
</target>
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="console,file" />
</rules>
</nlog>
上述代码片段的含义是,我们在targets节点中定义了日志输出的两个源,分别为ColoredConsole和File,并指定了文件名和一个布尔表达式,用于在日志切割时区分不同的日志文件。在rules节点中,我们将日志级别设置为Trace,并将日志输出到console和file两个源中。
步骤四:添加日志记录
最后,我们可以在应用程序中使用NLog来记录日志了,如下所示:
using Microsoft.Extensions.Logging;
public class SampleController : ControllerBase
{
private readonly ILogger<SampleController> _logger;
public SampleController(ILogger<SampleController> logger)
{
_logger = logger;
}
[HttpGet("test")]
public IActionResult Test()
{
_logger.LogInformation("This is a test log.");
return Ok();
}
}
在上述代码中,我们通过构造函数注入ILogger
以上是使用Serilog和NLog记录日志的完整攻略,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ASP.NET Core记录日志 - Python技术站