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里使用,如下:

先注入:

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,如下:

public class MyLogEventIds
{
    public const int HomePage = 1000;
}

然后使用:

public IActionResult Index() 
{
     _logger.LogInformation(MyLogEventIds.HomePage, "visiting home index......");

     return View();
}

可以在控制台看到: 

 

基本格式就是这样,一共就三部分内容,一个是分类,一个是ID,一个是信息,有时候信息里边我们要加一些参数,如下:

int id = 10;

 _logger.LogInformation(MyLogEventIds.HomePage, "visiting home index {0}", id);

注意:参数形式建议使用占位符,不建议使用$语法。

再看一下配置文件里的Log配置,先看appsettings.json文件:

"Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },

再看看appsettings.Development.json文件:

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}

可以表明,Debug级别以上的可以使用Log,一下的就不能了,比如说:

_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方法里配置:

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

然后使用:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseSerilog()
                .UseStartup<Startup>();

启动项目,打开控制台:

 

可以看到,颜色都变了。再看一下目录:

 

里边就是输出的日志详情。

 

posted @ 2020-08-27 13:51  初晨~  阅读(667)  评论(0编辑  收藏  举报