Net7引入Serilog日志输出到Seq日志服务
### Net7引入Serilog日志输出到Seq日志服务
#### TerraMours框架踩坑记录
官方地址:https://hub.docker.com/r/datalust/seq
#### Logstash 和 Seq优劣
GPT回答优缺点:
Logstash 和 Seq 都是常见的日志收集和分析工具,它们各有优劣点。
Logstash 是 Elastic Stack 中的一个组件(另外两个组件是 Elasticsearch 和 Kibana),它支持通过日志收集器实时收集、过滤和转换日志数据,并将数据发送到 Elasticsearch 中进行存储和查询。Logstash 的强大之处在于它的插件生态系统非常丰富,支持各种各样的数据输入源、过滤器和输出目的地。此外,Logstash 还支持多线程处理和零延迟数据传输,可快速处理大量数据。
Seq 是一个专门的日志管理工具,它提供了强大的搜索和过滤功能,能够极大地提高日志分析的效率;它还支持通过 API 将数据发送到其他系统中。Seq 支持通用日志格式(如 JSON 和 XML),可以自动解释和索引日志事件的属性,还提供了强大的查询语言,可用于过滤、聚合和计算日志数据的统计信息。
相对而言,Seq 的优越点在于它平滑地支持 .NET 日志库,比如 Serilog,这使得你可以轻松地在 .NET 应用程序中实现结构化日志记录。此外,Seq 支持通过 UI 和 API 更好的查询、分析和可视化日志数据,同时,Seq 还提供了丰富的告警和通知机制,可以让你在出现问题时第一时间得到告知。
总的来说,Logstash 更适合处理海量的结构化和非结构化数据,而 Seq 显然更加专注于 .NET 环境下的日志收集、过滤和分析。如果你的系统是 .NET 环境,同时希望实现结构化日志记录、快速查询和告警机制等功能,Seq 可能更加适合你。
##### 主要是更方便的支持Net,并且有使用过,所以没考虑Logstash
Seq并不是完全免费的,但是我们使用个人版即可,完全够用,价格如下
### docker安装Seq
使用容器本地存储和端口上的所有服务运行最初不安全的 Seq 实例`5341`:
```
docker run --name seq -d --restart unless-stopped -e ACCEPT_EULA=Y -p 5341:80 datalust/seq:latest
```
使用初始密码运行 Seq 实例`admin`,访问localhost:5341即可:
如图:
这种方式不需要登陆,仅供学习和本地开发测试使用。
##### 详细信息参考官方文档:
官方docker安装文档:https://hub.docker.com/r/datalust/seq
### Program添加以下代码即可
需要引入以下nuget包:版本以你自己的为准
```
<PackageReference Include="Serilog.AspNetCore" Version="7.0.0" /> <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" /> <PackageReference Include="Serilog.Sinks.Seq" Version="5.2.2" />
``````
//注入日志 // 配置 Serilog 日志记录器 Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .MinimumLevel.Override("Microsoft", LogEventLevel.Information) .Enrich.FromLogContext() .WriteTo.Console() //.WriteTo.File() .WriteTo.Seq("http://localhost:5341/") .CreateLogger(); builder.Host.UseSerilog(Log.Logger); //日志 app.UseSerilogRequestLogging();
```
\---------------------------------------------------------分界线--------------------------------------------------------------
#### 说明:(下面方式有些问题)
下面方式如果对应的MinimalService构造没有注入Ilog会报错,后续会看看原因。改为以下方式
```
//minimal Service 构造函数没有Ilog 会报错 builder.Services.AddLogging(builder => { Log.Logger = new LoggerConfiguration() // .MinimumLevel.Information().Enrich.FromLogContext() .MinimumLevel.Debug() .MinimumLevel.Override("Microsoft", LogEventLevel.Information) .Enrich.FromLogContext() .WriteTo.Console() //.WriteTo.File(initOptions.LogFilePath) .WriteTo.Seq("http://localhost:5341/") .CreateLogger(); builder.AddSerilog(); });
```
#### 如何使用
##### 主要核心代码:
```
private readonly Serilog.ILogger _log; public LoginMiniApiService(Serilog.ILogger log) : base() { _log = log; } //测试seq _log.Information("登录成功,测试Seq");
```
##### 代码图片
##### 测试登陆接口之后,查看Seq日志:
##### 使用Seq日志搜索功能
日志看起来很多是因为设置的information级别,自己项目按自己的需求设置
##### Serilog包说明:
* Serilog.Sinks.File:用于将日志写入文件。
* Serilog.Sinks.MSSqlServer:用于将日志写入 SQL Server 数据库。
* Serilog.Sinks.PostgreSQL:用于将日志写入 PostgreSQL 数据库。
* Serilog.Sinks.MongoDB:用于将日志写入 MongoDB 数据库。
* Serilog.Sinks.Seq:用于将日志写入 Seq。
个人博客:https://www.firstsaofan.top/
TerraMours源码地址:https://github.com/firstsaofan/TerraMours