.NET Core 日志记录程序和常用日志记录框架

本文主要内容为.NET Core的日志记录程序和常使用的日志记录框架的简单使用

首先,打开VS2019新建一个ASP.NET Core Web Api项目,项目创建好后会有一个集成好的天气预报的类和控制器,接下来,我们的方法就在天气控制器里完成。

.NET Core 日志记录程序和常用日志记录框架_第1张图片

1、配置提供程序替换默认提供程序

在启动项中添加Log配置替换默认的日志提供程序,在控制器中编写具体输出内容

1)Program.cs

public static IHostBuilder CreateHostBuilder(string[] args) => 
    Host.CreateDefaultBuilder(args).ConfigureLogging(logging => // 添加提供程序(通用主机)
    {
        logging.ClearProviders(); // 去掉默认添加的日志提供程序
        logging.AddConsole();
        logging.AddDebug();
        logging.AddEventSourceLogger();
        logging.AddEventLog();
    }).ConfigureWebHostDefaults(webBuilder =>
    {
    webBuilder.UseStartup < Startup > ();
    });

2)控制器

[ApiController]
[Route("[controller]/[action]")]
public class WeatherForecastController: ControllerBase
{
    private readonly ILogger  _logger;
    public WeatherForecastController(ILogger  logger)
    {
        _logger = logger;
    }
    /// 
    /// 获取日志输出 - 通用主机
    /// 
    [HttpGet]
    public void GetLogOutUniversalHost()
    {
        // 内置日志
        _logger.LogTrace(1000, "log Trace msg");
        _logger.LogDebug(1001, "log Debug msg");
        _logger.LogInformation(1002, "log Information msg");
        _logger.LogWarning(1003, "log Warning msg");
        _logger.LogError(1004, "log Error msg");
        _logger.LogCritical(1005, "log Critical msg");
    }
}

3)运行结果

2、创建LoggerFactory时调用提供程序的扩展方法

直接在控制器中创建LoggerFactory时调用提供程序的Add方法,使用LoggerFactory来创建 ILogger

1)控制器

[ApiController]
[Route("[controller]/[action]")]
public class WeatherForecastController: ControllerBase
{
    /// 
    /// 获取日志输出 - 非主机
    /// 
    [HttpGet]
    public void GetLogOutNonHost()
    {
        var loggerFactory = LoggerFactory.Create(builder =>
        {
            builder.AddFilter("Microsoft", LogLevel.Warning).AddFilter("System", LogLevel.Warning).AddFilter("LoggingConsoleApp.Program", LogLevel.Debug).AddConsole().AddEventLog();
        });
        ILogger logger = loggerFactory.CreateLogger();
        logger.LogInformation("非主机模式输出log msg");
    }
}

2)运行结果

3、 Log4Net

1)使用NuGet安装log4net包

2)新建log4net.config配置文件,配置日志输出格式 

.NET Core 日志记录程序和常用日志记录框架_第2张图片

3)右键新添加的log4net.config配置文件,更改文件属性->复制到输出目录选项:始终复制

.NET Core 日志记录程序和常用日志记录框架_第3张图片

或者在项目的.csproj文件添加如下代码:


    
        Always
    

4)log4net.config配置文件内容



    
        

关于log4net.config配置的详细说明,可参考log4net配置文件详解

5)控制器

5.1  Log4Net 简单配置,输出至控制台

/// 
/// 获取日志输出 - 第三方框架:Log4Net(简单配置,输出至控制台)
/// 
[HttpGet]
public void GetLogOutWithLog4NetSimpleConfiguration()
{
    ILoggerRepository repository = LogManager.CreateRepository(".NET Core RepositoryRepository");
    // 默认简单配置,输出至控制台
    BasicConfigurator.Configure(repository);
    ILog log = LogManager.GetLogger(repository.Name, ".NET Core Log4net");
    log.Info(".NET Core Log4net log");
    log.Info("test log");
    log.Error("error");
    log.Info("linezero");
}

5.1  运行结果

5.2  Log4Net 增加配置,输出至文件

/// 
/// 获取日志输出 - 第三方框架:Log4Net(增加配置,输出至文件)
/// 
[HttpGet]
public void GetLogOutWithLog4NetComplexConfigurations()
{
    ILoggerRepository repository = LogManager.CreateRepository(".NET Core RepositoryRepository");
    XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));
    ILog log = LogManager.GetLogger(repository.Name, ".NET Core Log4net");
    log.Info(".NET Core Log4net log");
    log.Info("test log");
    log.Error("error");
    log.Info("linezero");
}

5.2  运行结果

.NET Core 日志记录程序和常用日志记录框架_第4张图片

4、 NLog

1)使用NuGet安装NLog和NLog.Web.AspNetCore包

.NET Core 日志记录程序和常用日志记录框架_第5张图片

2)新建nlog.config配置文件,配置日志输出格式

.NET Core 日志记录程序和常用日志记录框架_第6张图片 3)右键新添加的log4net.config配置文件,更改文件属性->复制到输出目录选项:始终复制

.NET Core 日志记录程序和常用日志记录框架_第7张图片

或者在项目的.csproj文件添加如下代码:


    
        Always
    

 4)nlog.config配置文件内容



    
    
        
    
    
    
        
        
        
        
        
        
    
    
    
        
        
        
        
        
        
        
        
    

5)配置并启用NLog

public class Program
{
    public static void Main(string[] args)
    {
        var logger = NLog.LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger();
        try
        {
            logger.Debug("init main");
            CreateHostBuilder(args).Build().Run();
        }
        catch(Exception exception)
        {
            // NLog: 捕获设置错误
            logger.Error(exception, "Stopped program because of exception");
            throw;
        }
        finally
        {
            // 确保在应用程序退出前刷新和停止内部定时器/线程(避免Linux上的分段故障)
            NLog.LogManager.Shutdown();
        }
    }
    public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>
    {
        webBuilder.UseStartup < Startup > ();
    }).ConfigureLogging(logging =>
    {
        logging.ClearProviders();
        logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
    }).UseNLog(); // NLog: 依赖性注入设置NLog
}

6)配置appsettings.json

appsettings.json中指定的日志配置覆盖了对SetMinimumLevel的任何调用。因此,要么删除 "Default":要么根据你的需要正确调整。

上述logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);

所以配置文件需要更改

{
    "Logging": {
        "LogLevel": {
            "Default": "Trace", // 这里更改的地方
            "Microsoft": "Warning",
            "Microsoft.Hosting.Lifetime": "Information"
        }
    },
    "AllowedHosts": "*"
}

记得也要测试环境的配置,appsettings.Development.json,以免出现异常

{
    "Logging": {
        "LogLevel": {
            "Default": "Trace", // 这个要更改
            "Microsoft": "Warning",
            "Microsoft.Hosting.Lifetime": "Information"
        }
    }
}

7)控制器

/// 
/// 获取日志输出 - 第三方框架:NLog
/// 
[HttpGet]
public void GetLogOutWithNLog()
{
    // 内置日志
    _logger.LogTrace(1000, "log Trace msg");
    _logger.LogDebug(1001, "log Debug msg");
    _logger.LogInformation(1002, "log Information msg");
    _logger.LogWarning(1003, "log Warning msg");
    _logger.LogError(1004, "log Error msg");
    _logger.LogCritical(1005, "log Critical msg");
}

8)运行结果

.NET Core 日志记录程序和常用日志记录框架_第8张图片

 关于配置文件的说明可查看官网:NLog Configuration-file

还有一篇翻译文章方便查看:NLog类库使用探索——详解配置

5、Serilog

1)使用NuGet安装Serilog.AspNetCore包

 2)配置Serilog输出格式等信息

public class Program
{
    public static void Main(string[] args)
    {
        // 配置Serilog
        Log.Logger = new LoggerConfiguration()
            // 设定最小的记录级别
            .MinimumLevel.Debug()
            // 如果遇到Microsoft命名空间,那么最小记录级别为Information
            .MinimumLevel.Override("Microsoft", Serilog.Events.LogEventLevel.Information)
            // 记录相关上下文信息
            .Enrich.FromLogContext()
            // 日志输出到控制台
            .WriteTo.Console()
            // 输出到文件,指定输出路径和周期
            .WriteTo.File(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"logs/serilog/serilog.txt"), rollingInterval: RollingInterval.Day) // 配置日志输出文件,生成周期每天
            .CreateLogger();
        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(logging =>
    {
        logging.ClearProviders(); // 去掉默认添加的日志提供程序
    }).ConfigureWebHostDefaults(webBuilder =>
    {
        webBuilder.UseStartup < Startup > ();
    }).UseSerilog(); // 配置使用Serilog
}

这里为直接按照配置格式输出,当然也可以通过读取配置文件的形式读取配置的具体信息,本文不做具体阐述。

3)控制器

/// 
/// 获取日志输出 - 第三方框架:Serilog
/// 
[HttpGet]
public void GetLogOutWithSerilog()
{
    // 内置日志
    _logger.LogTrace(1000, "log Trace msg");
    _logger.LogDebug(1001, "log Debug msg");
    _logger.LogInformation(1002, "log Information msg");
    _logger.LogWarning(1003, "log Warning msg");
    _logger.LogError(1004, "log Error msg");
    _logger.LogCritical(1005, "log Critical msg");
}

4)运行结果

.NET Core 日志记录程序和常用日志记录框架_第9张图片

6、附录

1)Log4Net GitHub仓库地址

2)NLog GitHub仓库地址

3)Serilog GitHub仓库地址

4)NLog vs log4net vs Serilog: Compare .NET Logging Frameworks

5)LogLevel 枚举

.NET Core 日志记录程序和常用日志记录框架_第10张图片

6)日志级别

.NET Core 日志记录程序和常用日志记录框架_第11张图片

以上就是.NET Core 日志记录程序和常用日志记录框架的简单使用的介绍,做此记录,如有帮助,欢迎点赞关注收藏! 

你可能感兴趣的:(.NET开发,.netcore,log4net,nlog,serilog,日志)