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();
            }
        }
    }
    
  • 相关阅读:
    请教visiouml活动图中动作状态和状态的区别谢谢 软件工程管理 软件规划版
    !!!IT人员迅速提升自我效率的十大方法
    如何在Visio的UML活动图中(判断及控制流)添加文字啊????
    Convert Standard String to System::String
    m_pRecordset遍历记录集之后,m_pRecordsetMoveFirst()为什么会出错
    !!! C++/CLI中使用using namespace System::Windows::Forms;+MessageBox报错最重要的是看MSDN 每个函数的使用例子
    !!!创建 UML 活动图 Visio Office_com
    C#反射之AssemblyCLR/c++可以通过反射调用c#类库
    请允许我进入你的世界
    以赛庆党日
  • 原文地址:https://www.cnblogs.com/mi21/p/15435404.html
Copyright © 2011-2022 走看看