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

发布时间 2023-05-17 11:43:10作者: 乐优丶刘

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、配置Serilog
builder.Host.UseSerilog((context, services, loggerConfiguration) => loggerConfiguration .ReadFrom.Configuration(context.Configuration) .Enrich.FromLogContext() );
使用Serilog记录Request
app.UseSerilogRequestLogging();

4、配置appsettings
"Serilog": { "MinimumLevel": { "Default": "Information", "Override": { "Microsoft": "Information", "System": "Information" } }, "WriteTo": [ { "Name": "Console" }, { //MySQL要大写,MySql这样写的话会不认,提示 "Name": "MySQL", "Args": { "connectionString": "Data Source=***;Database=***;AllowLoadLocalInfile=true;User ID=***;Password=***;allowPublicKeyRetrieval=true;pooling=true;CharSet=utf8;port=***;sslmode=none;", "tableName": "Logs", //自动生成表 "autoCreateSqlTable": true } } ], "Enrich": [ "FromLogContext" ], "Properties": { "Application": "Serilog.Test.WebApi", "Environment": "Development" } }

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

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

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

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

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

7、在控制器中配置。
`[Route("api/[controller]")]
[ApiController]
public class SerilogController : ControllerBase
{
private readonly ILogger _logger;

    public SerilogController(ILogger<SerilogController> logger)
    {
        _logger = logger;
    }

    [HttpGet]
    public string Get()
    {
        _logger.LogInformation("Test Test.");
        return "begin";
    }
}`

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

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

补充:生产环境根据需求定义自己的记录级别即可。
例如:
Verbose,
Debug,
Information,
Warning,
Error,
Fatal,