serilog输出日志到console、File、Postgresql

Serilog是 .NET 中最著名的结构化日志类库 ,我们在.net6 webapi 项目中快速的进行配置,使用Serilog 输出日志到控制台,文件,Postgresql数据库。
1.安装依赖包
Install-Package Serilog.AspNetCore
Install-Package Serilog.Sinks.PostgreSQL
2.Program中注入服务

//注入日志服务
builder.Services.AddLogging(logBuilder => {
    string connectionstring = MIS.WebApi.AppSettingsHelper.Configuration["ConnStr:PGConnStr"];
    string tableName = "MIS_logs";
    //Used columns (Key is a column name) 
    //Column type is writer's constructor parameter
    IDictionary<string, ColumnWriterBase> columnWriters = new Dictionary<string, ColumnWriterBase>
        {
            {"message", new RenderedMessageColumnWriter(NpgsqlDbType.Text) },
            {"message_template", new MessageTemplateColumnWriter(NpgsqlDbType.Text) },
            {"level", new LevelColumnWriter(true, NpgsqlDbType.Varchar) },
            {"raise_date", new TimestampColumnWriter(NpgsqlDbType.Timestamp) },
            {"exception", new ExceptionColumnWriter(NpgsqlDbType.Text) },
            {"properties", new LogEventSerializedColumnWriter(NpgsqlDbType.Jsonb) },
            {"props_test", new PropertiesColumnWriter(NpgsqlDbType.Jsonb) },
            {"machine_name", new SinglePropertyColumnWriter("MachineName", PropertyWriteMethod.ToString, NpgsqlDbType.Text, "l") }
        };
    Log.Logger = new LoggerConfiguration()
      .MinimumLevel.Debug()//最小输出级别
      .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)//将Microsoft前缀的日志的最小输出级别改成Information
      .Enrich.FromLogContext()
      //输出到控制台
      .WriteTo.Console(new JsonFormatter())
        // 配置日志输出到文件,文件输出到当前项目的 logs 目录下  // 日记的生成周期为每天,保留7天的日志
      .WriteTo.File(Path.Combine("logs", @"log.txt"), rollingInterval: RollingInterval.Day, retainedFileCountLimit:3)
      //输出日志到Postgresql
      .WriteTo.PostgreSQL(
        connectionString: connectionstring,
        tableName: tableName,
        columnOptions: columnWriters,
        restrictedToMinimumLevel:LogEventLevel.Debug,
        needAutoCreateTable:true     
        )
      .CreateLogger();
    logBuilder.AddSerilog();
});

3.Controllers中使用

    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {

         private static readonly string[] Summaries = new[]
        {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };

        private readonly ILogger<WeatherForecastController> _logger;

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

        [HttpGet(Name = "GetWeatherForecast")]
        public IEnumerable<WeatherForecast> Get()
        {
            _logger.LogWarning("我在WeatherForecast Api 这里");
            _logger.LogError("我在WeatherForecast Api 这里 have some error test");
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateTime.Now.AddDays(index),
                TemperatureC = Random.Shared.Next(-20, 55),
                Summary = Summaries[Random.Shared.Next(Summaries.Length)]
            })
            .ToArray();
        }

    }

4.执行结果图示
控制台输出文件输出

日志写入到数据库

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值