Serilog在.net core中的使用

1. Nu包安装Serilog.ASPNetCore和Serilog.Sinks.File

2. 在APPSettings中添加Serilog注入

  "Serilog": {
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "logs/log.txt",
          "rollingInterval": "Day",
          "outputTemplate": "Occurrence Time: {Timestamp:HH:mm:ss.fff} Level: {Level} Detailed Information: {Message}{NewLine}{Exception}"
        }
      }
    ]
  },

3. 在Program.cs中注册Serilog的引用

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Serilog;
using System;

namespace SuperNode.WebApi
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration().
                MinimumLevel.Debug().
                MinimumLevel.Override("Microsoft", Serilog.Events.LogEventLevel.Information)
                .ReadFrom.Configuration(new ConfigurationBuilder()
                .AddJsonFile("appsettings.json")
                .Build())
                .Enrich.FromLogContext().
                 /*WriteTo.File(Path.Combine("logs", @"log.txt"), (Serilog.Events.LogEventLevel)RollingInterval.Day, outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}").
                  .WriteTo.MSSqlServer("Data Source=DESKTOP-4TU9A6M;Initial Catalog=CoreFrame;User ID=sa;Password=123456", "logs", autoCreateSqlTable: true, restrictedToMinimumLevel: LogEventLevel.Information)*/
                 CreateLogger();

            try
            {
                Log.Information("SuperNode.DataPrivilegeCenter");
                CreateHostBuilder(args).Build().Run();
            }
            catch (Exception ex)
            {
                Log.Fatal(ex, "Host terminated unexpectedly");
            }
            finally
            {
                Log.CloseAndFlush();
            }
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseSerilog()
                              .UseStartup<Startup>();
                });
    }
}

4. 在Controller中使用

[Route("api/[controller]")]
    [ApiController]
    public class TestController : ControllerBase
    {
        private readonly ILogger<TestController> _logger;

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

        [HttpGet("getById")]
        public string Get()
        {
            return "Hello Web API World";
        }

        [HttpPost]
        public string Add()
        {
            return "";
        }

        [HttpPut]
        public string Put()
        {
            return "";
        }

        [HttpDelete]
        public string Delete()
        {
            return "";
        }
    }

5. 最终生成的Log文件

Occurrence Time: 09:46:02.288 Level: Information Detailed Information: SuperNode.DataPrivilegeCenter
Occurrence Time: 09:46:03.296 Level: Information Detailed Information: Application started. Press Ctrl+C to shut down.
Occurrence Time: 09:46:03.301 Level: Information Detailed Information: Hosting environment: "Development"
Occurrence Time: 09:46:03.302 Level: Information Detailed Information: Content root path: "E:\SuperNode\SuperNode.UserPrivilegeCenter\WebApplication1"
Occurrence Time: 09:46:03.328 Level: Information Detailed Information: Request starting HTTP/2 GET https://localhost:44307/swagger/index.html - -
Occurrence Time: 09:46:03.760 Level: Information Detailed Information: Request finished HTTP/2 GET https://localhost:44307/swagger/index.html - - - 200 - text/html;charset=utf-8 434.8918ms
Occurrence Time: 09:46:03.949 Level: Information Detailed Information: Request starting HTTP/2 GET https://localhost:44307/swagger/v1/swagger.json - -
Occurrence Time: 09:46:04.161 Level: Information Detailed Information: Request finished HTTP/2 GET https://localhost:44307/swagger/v1/swagger.json - - - 200 - application/json;charset=utf-8 212.2678ms
Occurrence Time: 09:46:10.729 Level: Information Detailed Information: Request starting HTTP/2 GET https://localhost:44307/UserInfot/Get - -
Occurrence Time: 09:46:10.774 Level: Information Detailed Information: Executing endpoint '"WebApplication1.Controllers.UserInfotController.Get (SuperNode.UserPrivilegeCenter.API)"'
Occurrence Time: 09:46:10.798 Level: Information Detailed Information: Route matched with "{action = \"Get\", controller = \"UserInfot\"}". Executing controller action with signature "System.Collections.Generic.List`1[SuperNode.UserPrivilegeCenter.Entities.UserInfo] Get()" on controller "WebApplication1.Controllers.UserInfotController" ("SuperNode.UserPrivilegeCenter.API").
Occurrence Time: 09:46:10.805 Level: Information Detailed Information: Executing "ObjectResult", writing value of type '"System.Collections.Generic.List`1[[SuperNode.UserPrivilegeCenter.Entities.UserInfo, SuperNode.UserPrivilegeCenter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"'.
Occurrence Time: 09:46:10.828 Level: Information Detailed Information: Executed action "WebApplication1.Controllers.UserInfotController.Get (SuperNode.UserPrivilegeCenter.API)" in 25.3773ms
Occurrence Time: 09:46:10.828 Level: Information Detailed Information: Executed endpoint '"WebApplication1.Controllers.UserInfotController.Get (SuperNode.UserPrivilegeCenter.API)"'
Occurrence Time: 09:46:10.829 Level: Information Detailed Information: Request finished HTTP/2 GET https://localhost:44307/UserInfot/Get - - - 200 - application/json;+charset=utf-8 99.8546ms
Occurrence Time: 09:46:12.740 Level: Information Detailed Information: Request starting HTTP/2 GET https://localhost:44307/UserInfot/Get - -
Occurrence Time: 09:46:12.741 Level: Information Detailed Information: Executing endpoint '"WebApplication1.Controllers.UserInfotController.Get (SuperNode.UserPrivilegeCenter.API)"'
Occurrence Time: 09:46:12.741 Level: Information Detailed Information: Route matched with "{action = \"Get\", controller = \"UserInfot\"}". Executing controller action with signature "System.Collections.Generic.List`1[SuperNode.UserPrivilegeCenter.Entities.UserInfo] Get()" on controller "WebApplication1.Controllers.UserInfotController" ("SuperNode.UserPrivilegeCenter.API").
Occurrence Time: 09:46:12.753 Level: Information Detailed Information: Executing "ObjectResult", writing value of type '"System.Collections.Generic.List`1[[SuperNode.UserPrivilegeCenter.Entities.UserInfo, SuperNode.UserPrivilegeCenter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"'.
Occurrence Time: 09:46:12.754 Level: Information Detailed Information: Executed action "WebApplication1.Controllers.UserInfotController.Get (SuperNode.UserPrivilegeCenter.API)" in 12.8913ms
Occurrence Time: 09:46:12.755 Level: Information Detailed Information: Executed endpoint '"WebApplication1.Controllers.UserInfotController.Get (SuperNode.UserPrivilegeCenter.API)"'
Occurrence Time: 09:46:12.755 Level: Information Detailed Information: Request finished HTTP/2 GET https://localhost:44307/UserInfot/Get - - - 200 - application/json;+charset=utf-8 15.5016ms

  

上一篇:Serilog配置


下一篇:Serilog 源码解析——数据的保存(下)