• asp.net core2 mvc 基础教程--Logging


    诊断中间件

    • 命名空间:Microsoft.AspNetCore.Diagnostics
    • 作用:报告信息并处理异常

    常用的诊断中间件:

    • UseDeveloperExceptionPage
    • UseStatusCodePages:返回 400~600 的状态码
    • UseExceptionHandler
    • UseWelcomePage:欢迎页,网站还在开发时可以启用该中间件
    • UseDatabaseErrorPage

    UseStatusCodePages 效果:
    image.png

    ASP.NET Core 里的 Log 系统

    • EventSource
    • ILogger
    • DiagnosticSource

    参阅:Docs ASP.NET Core 中的日志记录

    ILogger

    ILogger 基于 Providers

    • 内置
    • 可扩展使用其他的,或自己构建

    内置的 Log Providers:

    • Console
    • Debug:VS Debug 窗口
    • EventSource:可以做 Event Tracing
    • EventLog:将 Log 写入 Windows 事件 Log
    • TraceSource:仅支持完整的 .NET Framework
    • Azure App Service

    Log 等级:

    • Trace
    • Debug
    • Information
    • Warning
    • Error
    • Critical

    记录 Log 时的选项:

    • 分类
    • Event ID
    • 格式化字符串

    Logger 的使用

    查看 WebHost 源码,可以看到已经添加了好几个 Providers:

    .ConfigureLogging((Action<WebHostBuilderContext, ILoggingBuilder>) ((hostingContext, logging) =>
          {
            logging.AddConfiguration((IConfiguration) hostingContext.Configuration.GetSection("Logging"));
            logging.AddConsole();
            logging.AddDebug();
            logging.AddEventSourceLogger();
          }))

    自定义 Logger:

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .ConfigureLogging((hostingContext, logging) =>
            {
                logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
                logging.AddConsole();
            })
            .UseStartup<Startup>();

    MyLogEventIds:

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

    Logger 的注入和使用:

    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;
        public HomeController(ILogger<HomeController> logger)
        {
            _logger = logger;
        }
        public IActionResult Index()
        {
            _logger.LogInformation(MyLogEventIds.HomePage, "Visiting Home Index ...");
            return View();
        }
        ...
    }

    效果:
    image.png

    推荐写法:

    // 推荐,会记录单独的 id 参数
    _logger.LogInformation(MyLogEventIds.AlbumPage, "Visiting Album {0}", id);
    // 不推荐,仅记录了字符串
    _logger.LogInformation(MyLogEventIds.AlbumPage, $"Visiting Album {id}");

    第三方 Log Provider

    • Serilog
    • NLog
    • EImah

    Serilog

    配置 Serilog:

    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();
        var host = CreateWebHostBuilder(args).Build();
        ...
    }

    使用 Serilog:

     

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

     

    NLog

    NLog.Web.AspNetCore

  • 相关阅读:
    慢性肾炎患者的家庭养护
    中国居民五谷膳食指南
    第二单元丨对环境的察觉
    一个人是否靠谱,闭环很重要
    打赢营销胜仗
    治本修身──中醫內分泌調節養生法
    理想的激励
    卓越演讲:打动听众必知必会的策略和方法(原书第3版)
    每日一题_191008
    每日一题_191007
  • 原文地址:https://www.cnblogs.com/cqqinjie/p/13321859.html
Copyright © 2020-2023  润新知