Serilog介绍

SerilogSerilogSerilog是.net 下的新兴的日志框架,本文这里简单的介绍一下它的用法。

首先安装Nuget包:

  • Install-Package Serilog
  • Install-Package Serilog.Sinks.Console

其中包Serilog是Log核心库,Serilog.Sinks.Console是Log的控制台输出库,这个也是日志框架的一贯策略,一个核心库加多个输出库组合使用,这样可以保持良好的扩展性。

简单的示例:

using (var log = new LoggerConfiguration()
                .WriteTo.Console()
                .CreateLogger())
{
    log.Information("Hello, Serilog!");
    log.Warning("Goodbye, Serilog.");
}

输出结果如下:

LoggerConfiguration

这里用了一个LoggerConfiguration对象,它主要用于创建和设置Log对象,类似于Nlog里面的LogManager类。这里主要用它两个方法:

  • WriteTo:WriteTo属性用来设置日志的输出,Serilog将其称为Sink(水槽),还是比较形象的。
  • CreateLogger:用于创建一个ILogger类型的Logger对象.

ILogger

ILogger对象用于记录日志,和其他日志框架差不多。Serilog日志级别分为如下5级

  • Verbose,
  • Debug,
  • Information,
  • Warning,
  • Error,
  • Fatal,

//日志等级由低到高(等级越低输出的日志信息越详细):Verbose->Debug->Information->Warning->Error->Fatal

大多数的日志也是这样5级,只是有的名称叫的不同(NLog第1级叫Trace,其它的一致),每一级别对应一个写Log的函数:

 
log.Verbose("verbose");
log.Information("info");
log.Debug("debug");
log.Warning("warning");
log.Error("err");
log.Fatal("fatal");

另外,ILogger对象还有一个Dispose方法,用于关闭日志对象。

 

全局Logger对象

在实际的使用过程中,往往并不是每次使用都去创建一个ILogger,一种方式是通过依赖注入的方式创建一个全局的Logger。不过这种方式需要引入DI框架。在小程序中使用不算方便。

另一种方式是直接使用静态的Log类,它也携带了写入日志的方法,用起来非常方便。

Log.Warning("warning");
Log.Error("err");
Log.Fatal("fatal");

不过Log类之前,首先必须给它关联一个ILogger。

Log.Logger = new LoggerConfiguration()
            .WriteTo.Console()
            .CreateLogger();

 

接收器

Serilog的输出对象称之为Sink(水槽),github上提供了大量的第三方的可用sinks,这里简单的列举几个常用的:

  • Console        输出到控制台
  • Debug        输出到VS的Debug窗口
  • File            输出到文件
  • Rolling File    
  • MongoDB    输出到MongoDB
  • LiteDB        输出到文件数据库LiteDB
  • SQLite         输出到文件数据库SQLite
  • SignalR        输出为SignalR服务
  • HTTP        输出到REST服务

<< Serilog 是一款非常流行的 .NET 日志库,它支持结构化日志记录,并且具有高扩展性和灵活性。下面详细介绍 Serilog 的使用方法、配置以及其优势。 ### 使用步骤 1. **安装 NuGet 包**: 首先你需要添加对 `Serilog` 及其他相关包的引用,可以通过Nuget管理器或命令行进行: ```csharp dotnet add package serilog --version 2.10.0 ``` 如果你还需要额外的功能例如写入文件,那么也需要安装对应的 sink: ```shell dotnet add package serilog.sinks.file --version 5.0.0 ``` 2. **初始化 Logger** 在应用程序启动时创建并设置 logger 实例(通常是在 Main 方法里): ```csharp using Serilog; Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() // 设置最低的日志级别为 Debug. .WriteTo.File("log.txt")// 写入到文件名为 log.txt 的文本中去, // 如果不指定路径,默认会在执行程序所在目录下生成此文件。 .CreateLogger(); try { Log.Information("Application is starting up."); } catch (Exception ex) { Log.Fatal(ex,"Host terminated unexpectedly"); } finally{ Log.CloseAndFlush(); //关闭并且刷新所有缓冲区的数据确保数据已经保存到了最终目的地。 } ``` 3. **编写日志** 之后可以在任何地方用静态类 `Log` 来做各种类型的消息输出: ```csharp public class MyClass { public void DoWork(){ int userId = 4; string messageTemplate= "User with Id {UserId} did some work."; Log.ForContext<MyClass>().Information(messageTemplate ,userId); } } ``` 在这个例子里面我们不是简单的将信息作为字符串传递给logger而是提供了一个消息模板和参数列表。这使得我们可以很容易地解析这些值并在需要的时候检索它们. #### 主要特性与优点 - 支持丰富的 Sink 插件生态 : 拥有官方维护和支持的各种sink插件如控制台(console), 文件(file),电子邮件(emails),数据库(databases),elasticsearch等等; - 结构化的事件模型 : 不同于传统基于字符串拼接的方式构建日志语句,在serilog你可以定义占位符然后传入具体变量,便于后期分析; - 强大的过滤功能:可以根据严重程度等级或者自定义表达式来进行筛选哪些日志会被真正写出; - 方便集成现有系统:能够很好地适配 ASP.NET Core 应用和其他常见的.net框架环境. #### 常见配置选项 | 属性名 | 类型 | 默认值 |描述 | |-- |-- |--|--| | MinimumLevel | LogLevel| Information | 最低级别的日志将会被处理。<br>可选Debug /Information/Warning/Error/Fatal<br>| | WriteTo | IEnumerable<Sink>| None | 定义了所有的接收端点(即"水槽"Sinks)<br>可以同时发送到多个目标位置<br>| | Enrichers | ICollection<IEnricher>| Empty List | 提供上下文数据以增强每条日志的信息量 <br>比如包含机器名线程id等.<br>|
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值