zoukankan      html  css  js  c++  java
  • 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>();
    

    启动项目,打开控制台:

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

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

     

  • 相关阅读:
    利用消息机制实现.NET AOP(面向方面编程)--通过RealProxy实现 zz
    A Taste of AOP from Solving Problems with OOP and Design Patterns (Part II) zz
    在.Net中使用异步(一)
    在.Net中使用异步(二)
    技术人员的误区(zz)
    A Taste of AOP from Solving Problems with OOP and Design Patterns (Part III) zz
    利用矩阵进行坐标系转换
    如何选择开源许可证[zz]
    .Net,你为什么会慢
    理解 Thread.Sleep 函数
  • 原文地址:https://www.cnblogs.com/dcy521/p/13570989.html
Copyright © 2011-2022 走看看