Serilog .net下的新兴的日志框架
Serilog .net下的新兴的日志框架
1.Serilog简介
Serilog 是针对 .NET 应用程序的流行日志记录框架。它以其灵活性、易用性和可扩展性而闻名。借助 Serilog,开发人员可以轻松记录应用程序中的事件、错误和消息。它支持结构化日志记录,能够以结构化格式存储日志数据,便于查询和分析。
Serilog 的一个关键特性是其能够使用不同的“sinks”(日志事件的目标位置)。这些“sinks”可以包括控制台、文件、数据库以及第三方服务,如 Seq 或 Elasticsearch。
开发人员还可以通过 Serilog 为日志事件添加额外的属性和上下文信息,从而更容易地追踪问题并理解应用程序的流程。Serilog 还支持不同的输出格式,比如 JSON 或纯文本,进一步增强了其灵活性。
2.添加需要的包引用
3.编写整个日志代码
// 创建日志
Log.Logger = new LoggerConfiguration()
.WriteTo.File("log.txt",outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz}[{Level:u3}] {Message:ij}{Exception}{NewLine}")
.CreateLogger();
// 消除日志
Log.CloseAndFlushAsync();
4.使用日志代码
Log.Information("Hello, world!");
int a = 10, b = 0;
try
{
Log.Debug("Dividing {A} by {B}", a, b);
}
catch (Exception ex)
{
Log.Error(ex.Message);
Log.Error(ex, "Something went wrong");
}
finally
{
await Log.CloseAndFlushAsync();
}
5.输出模板中可以显示许多内置属性
Exception
- 完整的异常消息和堆栈跟踪,跨多行格式化。如果没有与事件关联的异常,则为空。
Level{Level:u3}{Level:w3}
- 日志事件级别,格式为完整级别名称。对于更紧凑的级别名称,请分别使用三个字符的大写或小写级别名称等格式。
Message:l:j
- 日志事件的消息,呈现为纯文本。格式说明符关闭字符串的引用,并对任何嵌入的结构化数据使用 JSON 样式呈现。
NewLineSystem.Environment.NewLine
- 换行标志
Properties:j
- 未出现在输出中其他位置的所有事件属性值。使用该格式来使用 JSON 呈现。
TimestampDateTimeOffset
- 事件的时间戳,以 .
DateTimeOffset
- 事件的时间戳,以 .
6.日志demo
2023-11-30 14:30:25.987 +08:00 [INF] Hello, world!
2023-11-30 14:30:26.062 +08:00 [DBG] Dividing 10 by 0
2023-11-30 14:30:26.107 +08:00 [ERR] Something went wrong
System.DivideByZeroException: Attempted to divide by zero.
at Program.Main() in F:\学习\Serilog\ConsoleApp\Program.cs:line 21
2023/11/30