关于使用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

浙公网安备 33010602011771号