Asp.Net WebApi 集成日志类库 - Serilog

简介

Serilog是.Net Core平台上非常著名的结构化日志类库。

Serilog 通过NuGet分发,项目包括一个Seirlog核心项目Seirlog和很多接收器sinks(超过100个),这些接收是通过插件的方式来实现将日志写入到各种终端,文件,邮件,数据库或日志服务器。

博文涉及内容

我会通过代码演示如何生成日志记录,完成依赖注入,输出到控制台,输出到目录。

前提条件

.Net Core 的环境我相信大家都有

这里重点说一下涉及到的Nuget包

Serilog.AspNetCore        #核心库
Serilog.Sinks.File        #输出日志文件
Serilog.Sinks.Console     #输出到控制台

Install-Package Serilog.AspNetCore
Install-Package Serilog.Sinks.File
Install-Package Serilog.Sinks.Console

初始化

Serilog的初始化代码在Program.cs脚本里

using System;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Serilog;
using Serilog.Events;

namespace Log.Services
{
    public class Program
    {
        public static void Main(string[] args)
        {
            //生成Log对象
            Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Information()    //输出的最小日志等级
                .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
                .WriteTo.Console()             //输出到控制台
                .WriteTo.File(AppContext.BaseDirectory + "/logs/log.log", rollingInterval: RollingInterval.Day)          //输出日志文件,并按日期分割
                .CreateLogger();               //创建Logger对象

            try
            {
                Log.Information("Starting up");
                CreateHostBuilder(args).Build().Run();
            }
            catch (Exception ex)
            {
                Log.Fatal(ex, "Application start-up failed");
            }
            finally
            {
                Log.CloseAndFlush();            //重置全局设置
            }
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureLogging(loggingBuilder => 
                { loggingBuilder.ClearProviders();     //去掉默认日志提供程序
                  loggingBuilder.AddSerilog();         //引用Serilog
                })
                .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
    }
}

注入实例

using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;

namespace Log.Services.Demo
{
    public class ClassName 
    {
        private readonly ILogger<ClassName> _logger;

        //构造函数声明注入
        public ClassName(ILogger<ClassName> logger)
        {
            _logger = logger;
        }
            
        //使用
        public void TestLog()
        {
            try
            {
                _logger.LogInformation("TestLog",null);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "");
            }
        }
    }
}

这个博文其实主要是写给我自己看的,不然每次搭建项目时都有遗漏。

基本上就是这样了,有问题或者是有建议的欢迎留言评论或者私信我。

猜你喜欢

转载自blog.csdn.net/Lyon_Nee/article/details/112800000