如何在 ASP.Net Core 中使用 Serilog

陈就
• 阅读 2805

记录日志的一个作用就是方便对应用程序进行跟踪和排错调查,在实际应用上都是引入 日志框架,但如果你的 日志文件 包含非结构化的数据,那么查询起来将是一个噩梦,所以需要在记录日志的时候采用结构化方式。

将日志结构化可以更容易的查询和分析,做法就是在写入的时候定义好数据的格式,这种格式包括:xml,json,或者你希望转成的任何结构。

Serilog 是一个第三方,开源的结构化日志框架,它的高层封装可以让开发者更容易的将日志记录到 console,file 和你能想到的各种 存储系统,这篇文章我们将会讨论如何在 ASP.Net Core 中使用 Serilog。

安装 Serilog

使用 Visual Studio 新建 ASP.Net Core 项目,接下来从 NuGet 上拉几个包,具体如下:

  • Serilog

这个包提供了对基本的结构化日志的功能支持。

  • Serilog.AspNetCore

这个包提供了 Serilog 对 AspNetCore 的支持。

  • Serilog.Settings.Configuration

这个包打通了 Serilog 和 Configuration ,这样你就可以直接从 appsettings.json 中读取配置。

  • Serilog.Sinks.Console

Console接收器顾名思义就是将 Serilog 的日志输出到 Console。

  • Serilog.Sinks.RollingFile

实现了对 滚动文件 的支持。

使用 Serilog Sink

Serilog 利用 sink 特性将日志送到不同的地方,比如:text文件,数据库,甚至是 ElasticSearch 中,换句话说,sink 特性可以把日志送到它该去的地方,当所有的 nuget 包都安装好了之后,下面的代码片段展示了如何将日志送到 console 中。


        public HomeController(ILogger<HomeController> logger)
        {
            using (var logConfig = new LoggerConfiguration().WriteTo.Console().CreateLogger())
            {
                logConfig.Information("This is a test data.");
            };

            _logger = logger;
        }

如何在 ASP.Net Core 中使用 Serilog

值得注意的是,Serilog 支持多个日志级别,如:verbose, debug, information, warning, error 和 fatal。

有时候为了调试目的,将日志送到 Console 是一个好办法,但将程序部署到生产之后,更通用的做法就是将日志记录到文件中,这样方便在生产上实时查看并做一定程度的日志分析,刚好这里的 Serilog.Sink.RollingFile 支持对滚动文件的支持,下面的代码片段展示了如何通过编程的方式将日志送到文件中。


        public HomeController()
        {
            var logger = new LoggerConfiguration().MinimumLevel.Debug().WriteTo
                                                  .RollingFile(@"e:\log.txt", retainedFileCountLimit: 7)
                                                  .CreateLogger();

            for (int i = 0; i < byte.MaxValue; i++)
            {
                logger.Information($"log {i}");
            }
        }

如何在 ASP.Net Core 中使用 Serilog

使用 Serilog 替换原生的 Logger

在 ASP.NET Core 中内置了 Logger 组件,这一节中我们一起看看如何使用 Serilog 将其进行替换,在 Program.Main 方法中使用如下代码:


    public class Program
    {
        public static void Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration()
             .MinimumLevel.Debug()
             .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
             .Enrich.FromLogContext()
             .WriteTo.Console()
             .CreateLogger();

            try
            {
                Log.Information("Starting web host");
                CreateHostBuilder(args).Build().Run();
            }
            catch (Exception ex)
            {
                Log.Fatal(ex, "Host terminated unexpectedly");
            }
            finally
            {
                Log.CloseAndFlush();
            }
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
              .UseSerilog()
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }

从上面的代码中可以看到,我在 CreateHostBuilder 中使用了 UseSerilog() 扩展方法来启动 Serilog,这样就做好了 Serilog 的替换工作,接下来可以在 Controller 中通过依赖注入的方式获取 logger 实例,如下代码所示:


        public IActionResult Index()
        {
            logger.LogInformation("hello world");

            return View();
        }

如何在 ASP.Net Core 中使用 Serilog

日志是一个应用程序不可或缺的一部分,所以选择一款 灵活 + 简单 的日志框架就显得特别重要了,Serilog 提供了低配置和易使用的特性让我们方便的将日志送到各个地方。

译文链接:https://www.infoworld.com/art...

更多高质量干货:参见我的 GitHub: csharptranslate

点赞
收藏
评论区
推荐文章
胖大海 胖大海
2年前
MySQL 通用查询日志与慢查询日志
MySQL中的日志包括:错误日志、二进制日志、通用查询日志、慢查询日志等等。这里主要介绍下比较常用的两个功能:通用查询日志和慢查询日志。1)通用查询日志:记录建立的客户端连接和执行的语句。2)慢查询日志:记录所有执行时间超过long
芝士年糕 芝士年糕
2年前
rsyslog详解
这边使用的是3A服务器一、日志介绍日志概念日志是系统用来记录系统及应用程序运行时的一些相关信息的文本文件日志作用日志是为了保存相关程序的运行状态、错误信息等,为了对系统进行分析、保存历史记录以及在出现错误时发现、分析错误使用linux系统日志类型内核信息服务信息应用程序信息二、rsyslog1、rsyslog介绍rsyslog是linux系统中用来实现日志功
Wesley13 Wesley13
3年前
RabbitMQ学习总结(6)——消息的路由分发机制详解
一、Routing(路由)(usingtheJavaclient)在前面的学习中,构建了一个简单的日志记录系统,能够广播所有的日志给多个接收者,在该部分学习中,将添加一个新的特点,就是可以只订阅一个特定的消息源,也就是说能够直接把关键的错误日志消息发送到日志文件保存起来,不重要的日志信息文件不保存在磁盘中,但是仍然能够在控制台输出,那么这便
Wesley13 Wesley13
3年前
MySQL日志体系详解
前言日志是MySQL数据库的重要组成部分。日志文件中记录着MySQL数据库运行期间发生的变化;也就是说用来记录MySQL数据库的客户端连接状况、SQL语句的执行情况和错误信息等。当数据库遭到意外的损坏时,可以通过日志查看文件出错的原因,并且可以通过日志文件进行数据恢复。MySQL的日志体系有如下几种分类:1.错误日志2.查询日志
Wesley13 Wesley13
3年前
MySQL Binlog 技术原理和业务应用案例分析
导语MySQLBinlog用于记录用户对数据库操作的结构化查询语言(StructuredQueryLanguage,SQL)语句信息。是MySQL数据库的二进制日志,可以使用mysqlbin命令查看二进制日志的内容。爱奇艺在会员订单系统使用到了MySQLBinlog,用来实现订单事件驱动。在使用Binlog后在简化系统设计的同
Wesley13 Wesley13
3年前
2.MySQL日志
MySQL日志分类  MySQL日志主要包含:错误日志、查询日志、慢查询日志、重做日志、回滚日志、二进制日志错误日志:  用来记录MySQL服务器运行过程中的错误信息,比如,服务器启动关闭信息、运行错误信息、时间调度器运行一个事件时产生的信息、在服务器上启动进程产生的信息。  错误日志可以自己配置,lo
Wesley13 Wesley13
3年前
mysql的innodb中事务日志ib_logfile
mysql的innodb中事务日志ib\_logfile事务日志或称redo日志,在mysql中默认以ib\_logfile0,ib\_logfile1名称存在,可以手工修改参数,调节开启几组日志来服务于当前mysql数据库,mysql采用顺序,循环写方式,每开启一个事务时,会把一些相关信息记录事务日志中(记录对数据文件数据修改的物理位置或
Stella981 Stella981
3年前
Serilog for DotNet Tutorial
在过去的几年中,结构化日志已经大受欢迎。而Serilog是.NET中最著名的结构化日志类库,我们提供了这份的精简指南来帮助你快速了解并运用它。0\.内容1.设定目标2.认识Serilog3.事件和级别4.触发和收集结构化数据5.为过滤和关联添加事件标记6.大海捞针\Findingneedl
Stella981 Stella981
3年前
Python日志库logging总结
在部署项目时,不可能直接将所有的信息都输出到控制台中,我们可以将这些信息记录到日志文件中,这样不仅方便我们查看程序运行时的情况,也可以在项目出现故障时根据运行时产生的日志快速定位问题出现的位置。1、日志级别Python标准库logging用作记录日志,默认分为六种日志级别(括号为级别对应的数值),NOTSET(0)、DEBUG(10)
日志框架简介-Slf4j+Logback入门实践 | 京东云技术团队
前言随着互联网和大数据的迅猛发展,分布式日志系统和日志分析系统已广泛应用,几乎所有应用程序都使用各种日志框架记录程序运行信息。因此,作为工程师,了解主流的日志记录框架非常重要。虽然应用程序的运行结果不受日志的有无影响,但没有日志的应用程序是不完整的,甚至可
京东云开发者 京东云开发者
7个月前
日志框架简介-Slf4j+Logback入门实践
作者:京东零售张洪前言随着互联网和大数据的迅猛发展,分布式日志系统和日志分析系统已广泛应用,几乎所有应用程序都使用各种日志框架记录程序运行信息。因此,作为工程师,了解主流的日志记录框架非常重要。虽然应用程序的运行结果不受日志的有无影响,但没有日志的应用程序