设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间13 现在时间13 缓存数据 到现在一共是295天,有了人生中第一张迷你专辑,我期许自己这不会是句号,只会是个逗号,会一直一直一直突破的,直到我唱不动的那天。

到现在一共是295天,有了人生中第一张迷你专辑,我期许自己这不会是句号,只会是个逗号,会一直一直一直突破的,直到我唱不动的那天。 -- 一种原谅

查看: 867|回复: 0

强大的 .NET 日志库Serilog详解

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:203
  • 打卡月天数:0
  • 打卡总奖励:2995
  • 最近打卡:2023-08-27 06:14:36
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
369
主题
341
精华
0
金钱
4080
积分
736
注册时间
2022-12-23
最后登录
2025-6-1

发表于 2025-6-1 05:32:13 | 显示全部楼层 |阅读模式

Serilog 是一个功能强大的日志记录库,专为 .NET 平台设计。它提供了丰富的 API 和可插拔的输出器及格式化器,使得开发者能够轻松定制和扩展日志记录功能。在本文中,我们将探索 Serilog 的基础知识、API 使用、配置和一些常见的示例。

1. 日志级别

Serilog 支持多个日志级别,按照严重性从高到低排列如下:

  • Fatal: 程序无法继续运行,必须立即解决的问题。
  • Error: 发生了错误,需要处理。
  • Warning: 警告,需关注但不必立即处理。
  • Information: 提供有用的消息,通常用于调试。
  • Debug: 调试信息,帮助开发者调试程序。
  • Verbose: 详细的日志信息,通常用于复杂问题的调试。

2. 日志输出

Serilog 支持多种日志输出方式,包括:

  • Console: 输出到控制台。
  • File: 输出到文件。
  • Seq: 输出到日志收集器 Seq。
  • Elasticsearch: 输出到 Elasticsearch。

此外,Serilog 也支持自定义日志输出器。

3. 日志格式

Serilog 提供了多种格式化日志消息的方式:

  • 简单文本格式:常见的日志输出格式。
  • JSON 格式:适合结构化日志。
  • Message Templates 格式:一种灵活的格式,允许在日志消息中插入占位符。

4. 安装

Serilog 可以通过 NuGet 安装:

  1. Install-Package Serilog
复制代码

5. 基础使用示例

在应用程序中使用 Serilog 十分简单。以下是一个简单的控制台日志输出示例:

  1. using Serilog;
  2. class Program
  3. {
  4. static void Main()
  5. {
  6. Log.Logger = new LoggerConfiguration()
  7. .MinimumLevel.Debug()
  8. .WriteTo.Console()
  9. .CreateLogger();
  10. Log.Information("Hello, Serilog!");
  11. Log.CloseAndFlush();
  12. }
  13. }
复制代码

此代码将在控制台输出

  1. Hello, Serilog!
复制代码

6. 日志级别示例

Serilog 允许设置不同的日志级别。以下示例演示了如何记录各种级别的日志消息:

  1. using Serilog;
  2. class Program
  3. {
  4. static void Main()
  5. {
  6. Log.Logger = new LoggerConfiguration()
  7. .MinimumLevel.Verbose()
  8. .WriteTo.Console()
  9. .CreateLogger();
  10. Log.Verbose("This is a verbose log message.");
  11. Log.Debug("This is a debug log message.");
  12. Log.Information("This is an informational log message.");
  13. Log.Warning("This is a warning log message.");
  14. Log.Error("This is an error log message.");
  15. Log.Fatal("This is a fatal log message.");
  16. Log.CloseAndFlush();
  17. }
  18. }
复制代码

7. 消息模板

Serilog 支持消息模板,允许开发者在日志中使用占位符。以下示例展示了如何使用消息模板:

  1. using Serilog;
  2. class Program
  3. {
  4. static void Main()
  5. {
  6. Log.Logger = new LoggerConfiguration()
  7. .MinimumLevel.Debug()
  8. .WriteTo.Console(outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}")
  9. .CreateLogger();
  10. Log.Information("Hello, {Name}!", "Serilog");
  11. Log.CloseAndFlush();
  12. }
  13. }
复制代码

上述代码将在控制台输出如下格式的日志:

  1. 2023-09-15 22:23:54.576 +08:00 [INF] Hello, Serilog!
复制代码

8. 日志属性

Serilog 支持在日志中添加附加属性。以下示例展示了如何记录额外的信息:

  1. using Serilog;
  2. class Program
  3. {
  4. static void Main()
  5. {
  6. Log.Logger = new LoggerConfiguration()
  7. .MinimumLevel.Debug()
  8. .WriteTo.Console()
  9. .CreateLogger();
  10. Log.Information("Processed {@Count} records in {Time} ms.", new { Count = 10, Time = 123 });
  11. Log.CloseAndFlush();
  12. }
  13. }
复制代码

此代码会输出:

  1. Processed { Count: 10, Time: 123 } records in 0 ms.
复制代码

9. 文件输出配置

Serilog 允许将日志输出到文件,并通过

  1. rollingInterval
复制代码
设置日志滚动方式。以下示例展示了如何按天滚动文件并设置输出模板:

  1. Log.Logger = new LoggerConfiguration()
  2. .WriteTo.File(
  3. $"logs\\log-.txt",
  4. rollingInterval: RollingInterval.Day,
  5. outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}")
  6. .CreateLogger();
  7. Log.Information("This is a log message!");
  8. Log.CloseAndFlush();
复制代码

这将创建类似于

  1. log-20230914.txt
复制代码
的文件,每天一个新文件。

10. 结构化日志记录

Serilog 支持结构化日志记录,这意味着可以将复杂的数据(如对象、集合等)以结构化的方式存储和输出。例如:

  1. using Serilog;
  2. class Program
  3. {
  4. static void Main()
  5. {
  6. var weather = new WeatherForecast
  7. {
  8. Date = DateTime.Now,
  9. TemperatureC = 22,
  10. Summary = "Sunny"
  11. };
  12. Log.Information("Weather forecast: {@Weather}", weather);
  13. Log.CloseAndFlush();
  14. }
  15. }
  16. public class WeatherForecast
  17. {
  18. public DateTime Date { get; set; }
  19. public int TemperatureC { get; set; }
  20. public string Summary { get; set; }
  21. }
复制代码

此代码将输出类似于:

  1. Weather forecast: {"Date":"2023-09-15T22:39:53.8634787+08:00","TemperatureC":22,"Summary":"Sunny","$type":"WeatherForecast"}
复制代码

11. 日志过滤

Serilog 允许使用过滤器控制输出。以下示例仅输出错误级别以上的日志:

  1. using Serilog;
  2. class Program
  3. {
  4. static void Main()
  5. {
  6. Log.Logger = new LoggerConfiguration()
  7. .MinimumLevel.Debug()
  8. .WriteTo.Console()
  9. .Filter.ByIncludingOnly(logEvent => logEvent.Level >= LogEventLevel.Error)
  10. .CreateLogger();
  11. Log.Verbose("This is a verbose log message.");
  12. Log.Error("This is an error log message.");
  13. Log.CloseAndFlush();
  14. }
  15. }
复制代码

此代码只会在控制台输出错误和更高严重级别的日志。

12. 扩展与自定义输出器

Serilog 支持自定义输出器,允许开发者将日志输出到不同的目的地(例如 Elasticsearch、数据库等)。以下是一个创建自定义控制台输出器的例子:

  1. using Serilog;
  2. using Serilog.Configuration;
  3. using Serilog.Events;
  4. public static class CustomConsoleSinkExtensions
  5. {
  6. public static LoggerConfiguration CustomConsole(
  7. this LoggerSinkConfiguration sinkConfiguration,
  8. ITextFormatter formatter = null,
  9. LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum)
  10. {
  11. return sinkConfiguration.Sink(
  12. new CustomConsoleSink(formatter),
  13. restrictedToMinimumLevel);
  14. }
  15. }
  16. public class CustomConsoleSink : ILogEventSink
  17. {
  18. private readonly ITextFormatter _formatter;
  19. public CustomConsoleSink(ITextFormatter formatter)
  20. {
  21. _formatter = formatter ?? throw new ArgumentNullException(nameof(formatter));
  22. }
  23. public void Emit(LogEvent logEvent)
  24. {
  25. var message = new StringWriter();
  26. _formatter.Format(logEvent, message);
  27. Console.WriteLine(message.ToString());
  28. }
  29. }
复制代码

然后可以通过以下方式将其添加到日志配置中:

  1. Log.Logger = new LoggerConfiguration()
  2. .WriteTo.CustomConsole()
  3. .CreateLogger();
复制代码

13. 总结

Serilog 是一个功能强大的 .NET 日志库,支持丰富的日志记录方式、输出方式和格式化选项。它的可扩展性和灵活性使得开发者能够根据应用程序的需求定制日志记录方式。从简单的控制台日志到复杂的结构化日志和自定义输出器,Serilog 都能轻松应对。

希望本文对您理解 Serilog 和高效使用该库有所帮助!

到此这篇关于强大的 .NET 日志库Serilog的文章就介绍到这了,更多相关.NET 日志库Serilog内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表