zoukankan      html  css  js  c++  java
  • Web API 集成Serilog

    首先 ,安装这两个nuget

    Install-Package Serilog.AspNetCore -Version 4.1.0

    Install-Package Serilog.Sinks.MSSqlServer -Version 5.6.1

    手动创建数据库 SerilogExample

    Startup.cs文件:

    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.Hosting;
    using Serilog;
    using Serilog.Sinks.MSSqlServer;
    using System;
    using System.Collections.ObjectModel;
    
    namespace SerilogExample.Api
    {
        public class Program
        {
            [Obsolete]
            public static void Main(string[] args)
            {
                var columOptions = new ColumnOptions
                {
                    AdditionalColumns = new Collection<SqlColumn>
                    {
                        new SqlColumn
                        {
                            ColumnName="Name",DataType=System.Data.SqlDbType.NVarChar
                        }
                    }
                };
                var conn = @"Data Source=.;database=SerilogExample;User ID=sa;Password=123456;Pooling=true;Max Pool Size=40000;Min Pool Size=0;";
    
                Log.Logger = new LoggerConfiguration()
                    .MinimumLevel.Debug()
                    .MinimumLevel.Override(source:"Microsoft", minimumLevel:Serilog.Events.LogEventLevel.Error)//筛选Microsoft的日志信息
                    .WriteTo.Console()//打印到控制台
                    .WriteTo.MSSqlServer(connectionString:conn,//连接字符串
                    tableName:"Logs", //表名
                    autoCreateSqlTable: true,//自动创建表
                    columnOptions: columOptions,//载入自定义表名
                    restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Debug)
                    .CreateLogger();
    
                CreateHostBuilder(args).Build().Run();
                Log.CloseAndFlush(); //释放日志
            }
    
            public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseSerilog().UseStartup<Startup>();//注册日志中间件
                    });
        }
    }
    
    

    Controller使用注入:

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

    正常使用:

    _logger.LogInformation("this is information message");
    

    使用 ForContext() 给自定义的列名添加值 (这种方式不知道规范不规范,但是可以使用):

    Serilog.Log.ForContext("Name", "zhangsan").Information("this is information message") ;
    

    Controller.cs完整代码

    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Logging;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace SerilogExample.Api.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]
            public IEnumerable<WeatherForecast> Get()
            {
    
                Serilog.Log.ForContext("Name", "sunshauize").Information("111111") ;
    
                _logger.LogInformation("this is information message");
                var rng = new Random();
                return Enumerable.Range(1, 5).Select(index => new WeatherForecast
                {
                    Date = DateTime.Now.AddDays(index),
                    TemperatureC = rng.Next(-20, 55),
                    Summary = Summaries[rng.Next(Summaries.Length)]
                })
                .ToArray();
            }
        }
    }
    
  • 相关阅读:
    UIPasteboard 粘贴板
    UIViewController没有随着设备一起旋转的原因
    UIButton 应用选择状态(附:UIButton 常用状态)
    WebService 中参数为枚举时引发的血案
    设计模式(1)之面向对象设计原则 阿正
    2012年年终总结 阿正
    生活工作如登山 阿正
    感谢我的技术总监 阿正
    尽孝要尽早 阿正
    我老了吗?不 你依然年轻 阿正
  • 原文地址:https://www.cnblogs.com/mi21/p/15435404.html
Copyright © 2011-2022 走看看