关于使用Serilog配置MySql数据库和appsettings的问题

1、项目使用dtonet 6 WebApi。

2、Nuget包:

// 用来访问mysql数据库

Pomelo.EntityFrameworkCore.MySql

// Serilog日志

Serilog

// 配合dotnet

Serilog.AspNetCore

// 读取环境变量配置

Serilog.Settings.Configuration

// Serilog读写MySql数据库

Serilog.Sinks.MySQL

// 输出到控制台中

Serilog.Sinks.Console

3、在Program中配置Serilog。

1     // 配置Serilog
2     builder.Host.UseSerilog((context, services, loggerConfiguration) => loggerConfiguration
3            .ReadFrom.Configuration(context.Configuration)
4            .Enrich.FromLogContext()
5         );

 1 // 使用Serilog记录Request。

2 app.UseSerilogRequestLogging(); 

4、配置appsettings。

 1 {
 2   "Serilog": {
 3     "MinimumLevel": {
 4       "Default": "Information",
 5       "Override": {
 6         "Microsoft": "Information",
 7         "System": "Information"
 8       }
 9     },
10     "WriteTo": [
11       {
12         "Name": "Console"
13       },
14       {
15         //MySQL要大写,MySql这样写的话会不认,提示
16         "Name": "MySQL",
17         "Args": {
18           "connectionString": "Data Source=***;Database=SerilogDB;AllowLoadLocalInfile=true;User ID=***;Password=***;allowPublicKeyRetrieval=true;pooling=true;CharSet=utf8;port=***;sslmode=none;",
19           "tableName": "Logs",
20           "autoCreateSqlTable": true
21         }
22       }
23     ],
24     "Enrich": [ "FromLogContext" ],
25     "Properties": {
26       "Application": "Serilog.Test.WebApi",
27       "Environment": "Development"
28     }
29   }
30 }

 

5、测试项目已经运行过,所以库表是已经存在的,但是第一次运行时,库和表都是不没有的。

 

因为Serilog不会自动创建数据库,但是会自动创建表,所以一般来说的话,可以将Serilog的表和其他数据库放在一起,这样就避免了需要手动创建数据库的问题。

6、配置好了,运行项目,并查看数据库内容。

这些是写入到数据库中的,只是因为级别设置成了Information,导致记录的内容有点多。 

下面的是在控制台输出的,因为也是配置了控制台的。

 

 

7、在控制器中配置。

 1     [Route("api/[controller]")]
 2     [ApiController]
 3     public class SerilogController : ControllerBase
 4     {
 5         private readonly ILogger<SerilogController> _logger; 
 6 
 7         public SerilogController(ILogger<SerilogController> logger)
 8         {
 9             _logger = logger;
10         }
11 
12         [HttpGet]
13         public string Get()
14         {
15             _logger.LogInformation("Test Test.");
16             return "begin";
17         }
18     }

 

 

结语:Serilog十分好用,跟ILogger结合,并不需要太多的额外代码就能使用。

以上内容仅供参考,如有错误,万望指正。

 

补充:生产环境根据需求定义自己的记录级别即可。

例如:

Verbose

Debug

Information

Warning

Error

Fatal

 

posted @ 2023-05-17 11:38  乐优丶刘  阅读(964)  评论(0)    收藏  举报