• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

serilog输出日志到console、File、Postgresql

武飞扬头像
Karry2019
帮助5

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.执行结果图示
学新通学新通

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfgkaei
系列文章
更多 icon
同类精品
更多 icon
继续加载