ASP.Net Core -- Logging
ASP.Net Core里的LOG系统
• EventSource
• ILogger
• DiagnosticSource
EventSource和DiagnosticSource是ASP.Net Core默认的,它会默认使用这两个,今天主要学习ILogger,它是基于Providers提供商,比如内置的有控制台提供商,等等。当然,我们自己也可以对其扩展,也可以使用第三方的Logger内置的Log Providers
内置的Log Providers
• Console
• Debug
• EventSource
• EventLog
• TraceSource
• Azure App Service
Log等级:
• Trace
• Debug
• Information
• Warning
• Error
• Critical
在进行记录日志的时候,还有一些选项参数,比如,分类,Event Id,格式化字符串
代码示例
先看一下源码,在Program.cs文件里对CreateDefaultBuilder进行反编译,可以看到如下:
可以看到里边已经有一些配置好的,如果我们想自己配置的话,可以在外边调用ConfigureLogging这个方法,来手动添加,比如只想要一个Console,如下:
怎么用Logger呢?比如我需要在HomeController.cs里使用,如下:
先注入:
1 2 3 4 5 6 7 8 9 10 | public readonly IRepository<Student> _repository; private readonly HostingEnvironment _hostingEnvironment; private readonly ILogger<HomeController> _logger; public HomeController(IRepository<Student> repository,HostingEnvironment hostingEnvironment,ILogger<HomeController> logger) { _repository = repository; _hostingEnvironment = hostingEnvironment; _logger = logger; } |
然后在Index方法里使用一下,如下:
先新建一个类,名为MyLogEventIds.cs,如下:
1 2 3 4 | public class MyLogEventIds { public const int HomePage = 1000; } |
然后使用:
1 2 3 4 5 6 | public IActionResult Index() { _logger.LogInformation(MyLogEventIds.HomePage, "visiting home index......" ); return View(); } |
可以在控制台看到:
基本格式就是这样,一共就三部分内容,一个是分类,一个是ID,一个是信息,有时候信息里边我们要加一些参数,如下:
1 2 3 | int id = 10; _logger.LogInformation(MyLogEventIds.HomePage, "visiting home index {0}" , id); |
注意:参数形式建议使用占位符,不建议使用$语法。
再看一下配置文件里的Log配置,先看appsettings.json文件:
1 2 3 4 5 | "Logging" : { "LogLevel" : { "Default" : "Warning" } }, |
再看看appsettings.Development.json文件:
1 2 3 4 5 6 7 8 9 | { "Logging" : { "LogLevel" : { "Default" : "Debug" , "System" : "Information" , "Microsoft" : "Information" } } } |
可以表明,Debug级别以上的可以使用Log,一下的就不能了,比如说:
1 | _logger.Trace(MyLogEventIds.HomePage, "visiting home index {0}" , id); |
这就没什么作用了。
第三方Log Provider
• Serilog
• NLog
• EImah
在ASP.Net Core中用的比较多的就是第一个,所以这里学习一下Serilog,首先安装Serilog,打开Nuget,如下:
搜索Serilog.aspnetcore,如下:
然后搜索Serilog.sinks,这个有很多,主要是用来将日志输出到哪里,比如,输出到控制台,输出在文本文件里等等,如下:
这里安装前两个,可以输出在控制台和文件里。
然后配置Serilog,在Main方法里配置:
1 2 3 4 5 6 7 8 9 10 11 12 | public static void Main( string [] args) { Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .MinimumLevel.Override( "Microsoft" , LogEventLevel.Information) .Enrich.FromLogContext() .WriteTo.Console() .WriteTo.File(Path.Combine( "logs" , "log.txt" ), rollingInterval: RollingInterval.Day) .CreateLogger(); CreateWebHostBuilder(args).Build().Run(); } |
最小级别是Debug,如果遇到Microsoft这个命名空间,它的最小级别是Information,下边两个WriteTo属于输出媒介,可以输出到控制台,也可以输出在log.txt文本文件里,rollingInterval: RollingInterval.Day代表每天生成一个文件,可以修改,比如每分钟Minute,下边测试就使用Minute
然后使用:
1 2 3 4 | public static IWebHostBuilder CreateWebHostBuilder( string [] args) => WebHost.CreateDefaultBuilder(args) .UseSerilog() .UseStartup<Startup>(); |
启动项目,打开控制台:
可以看到,颜色都变了。再看一下目录:
里边就是输出的日志详情。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步