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

 
posted @ 2023-05-15 01:16  忽如一夜娇妹来  阅读(165)  评论(0编辑  收藏  举报