.Net 6 配置日志
前言
.Net 6 与之前的配置有点不一样了记录下日志配置方式。 当前日志以Serilog为例,.Net 6 的日志由内置的Logger获取,然后可以交给Serilog|NLog等框架处理,
框架通过他们自己的配置方式选择输出和存储位置Console|File|Exceptionless;
安装依赖
这里安装的是Serilog,Serilog属于结构化日志,在之后的日志分析中有更大的优势;
Install-Package Serilog.AspNetCore
当然也可以安装其他日志,如NLog(Extension包含了NLog包)
Install-Package NLog.Extensions.Logging
输出方式
Serilog中可以通过LoggingServiceCollectionExtensions类下的AddLogging设置参数,或者通过appsettings.json配置参数(详情看官方文档),内置的Logger不支持文件写入,
所以引入了Serilog,Serilog支持写入日志文件,控制台输出等;还有一些分布式的日志存储,如Exceptionless,通过Exceptionless的Serilog扩展方法引入的;日志通过.net的Logger获取,
然后交由各个日志组件处理(Serilog,Nlog、log4net等),而输出方式由这些日志组件实现,这样配置好输出方式后直接操作内置的Logger即可完成日志输出;这里的日志输出方式配置了Console、File、Exceptionless;
如果需要配置分布式日志Exceptionless需要引入Exceptionless以及Exceptionless的Serilog包,如果用的不是Serilog日志,也可以引入其他日志的Exceptionless扩展包
引入Exceptionless
Install-Package Exceptionless.AspNetCore
引入Exceptionless的Serilog扩展包
Install-Package Serilog.sinks.Exceptionless
配置日志
//官方默认最低日志等级为Warming,这里手动设置日志级别
ExceptionlessClient.Default.Startup("WDnPrhXbuexxxxxxxxxxxxxxxxxxx");//去官网注册后申请,需要也可以自己部署服务
ExceptionlessClient.Default.Configuration.SetDefaultMinLogLevel(Exceptionless.Logging.LogLevel.Info);
builder.Services.AddLogging(x => {
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.Enrich.FromLogContext()
.WriteTo.Console(new JsonFormatter())//控制台日志
.WriteTo.File($"logs/{DateTime.Now:yyyy-MM-dd}.log")//文件日志
.WriteTo.Exceptionless()//Exceptionless分布式日志
.CreateLogger();
x.AddSerilog();
});
app.UseExceptionless();//捕获记录未处理异常
配置完成之后在项目里注入ILogger<T>即可使用日志,日志可以自动记录到配置的各个介质中;
private readonly ILogger<WeatherForecastController> _logger;
_logger.LogInformation("log");