ASP.NET Core记录日志

yizhihongxing

下面是关于使用ASP.NET Core记录日志的完整攻略。

1. 理解ASP.NET Core中的日志记录

ASP.NET Core中内置了一个日志记录框架,可以很方便地在应用程序中记录日志。它支持输出到不同媒介,如控制台、文件、事件日志等,并支持不同的级别,如信息、警告、错误等。

常见的使用情况是将日志输出到文件中,以便于后续查阅。在ASP.NET Core中,我们可以通过扩展IServiceCollection类中的AddLogging方法来集成日志记录框架,并手动配置日志记录器。

2. 使用Serilog记录日志

Serilog是一款流行的.NET日志框架,支持多种日志数据源,并提供了一些有用的扩展功能。在ASP.NET Core中使用Serilog非常简单,只需要添加一个nuget包即可。

步骤一:安装Serilog及其扩展

在ASP.NET Core项目中,通过Nuget包管理器安装Serilog及其扩展,如下所示:

Install-Package Serilog
Install-Package Serilog.Enrichers.Environment
Install-Package Serilog.Settings.Configuration
Install-Package Serilog.Sinks.File

步骤二:在Startup.cs中配置Serilog

在Startup.cs文件中,我们需要添加如下代码:

using Serilog;
using Serilog.Formatting.Compact;

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();

        // 添加Serilog日志记录器
        Log.Logger = new LoggerConfiguration()
            .ReadFrom.Configuration(Configuration)
            .CreateLogger();

        // 注册日志记录器到服务容器中
        services.AddLogging(loggingBuilder =>
        {
            loggingBuilder.ClearProviders();
            loggingBuilder.AddSerilog();
        });
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseSerilogRequestLogging();

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseHttpsRedirection();
        app.UseRouting();
        app.UseAuthorization();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }
}

这个代码片段中,我们首先使用ReadFrom.Configuration方法读取appsettings.json文件中的日志配置。然后使用CreateLogger方法将其实例化,并把日志记录器注册到服务容器中,以便于后续的使用。

步骤三:在appsettings.json中配置日志输出

最后,需要在appsettings.json文件中添加Serilog的配置:

"Serilog": {
    "MinimumLevel": {
        "Default": "Information",
        "Override": {
            "Microsoft": "Warning",
            "System": "Warning"
        }
    },
    "WriteTo": [
        {
            "Name": "Console",
            "Args": {
                "outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} <{SourceContext}>{NewLine}{Exception}"
            }
        },
        {
            "Name": "File",
            "Args": {
                "path": "logs/log.txt",
                "formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact",
                "rollingInterval": "Day",
                "retainedFileCountLimit": 7
            }
        }
    ]
}

上述代码片段的含义是,设置日志输出的最低级别为Information,同时设置了控制台和文件两个输出源并配置了输出模板和相关参数,这里我们使用前面添加的Serilog扩展中提供的CompactJsonFormatter,它可以将日志格式化为紧凑的JSON格式。

步骤四:添加日志记录

完成上述步骤,我们就可以在应用程序中使用Serilog来记录日志了,如下所示:

using Microsoft.Extensions.Logging;

public class SampleController : ControllerBase
{
    private readonly ILogger<SampleController> _logger;

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

    [HttpGet("test")]
    public IActionResult Test()
    {
        _logger.LogInformation("This is a test log.");
        return Ok();
    }
}

在上述代码中,我们通过构造函数注入ILogger接口并在Action方法中记录信息级别的日志。

3. 使用NLog记录日志

NLog是另一款流行的.NET日志框架,它也支持多种日志数据源,如文件、数据库等,并且提供了丰富的配置选项。

步骤一:安装NLog及其扩展

在ASP.NET Core项目中,通过Nuget包管理器安装NLog及其扩展,如下所示:

Install-Package NLog
Install-Package NLog.Extensions.Logging

步骤二:在Startup.cs中配置NLog

在Startup.cs文件中,我们需要添加如下代码:

using Microsoft.Extensions.Logging;
using NLog.Extensions.Logging;

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();
        services.AddSingleton<ILoggerFactory, LoggerFactory>();
        services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseHttpsRedirection();
        app.UseRouting();
        app.UseAuthorization();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });

        // 配置NLog
        NLog.LogManager.LoadConfiguration("nlog.config");
        app.AddNLogWeb();
    }
}

在这个代码片段中,我们首先注入了ILoggerFactory和ILogger到服务容器中。然后在Configure方法中配置了NLog,使用NLog.LogManager.LoadConfiguration方法加载NLog的配置文件nlog.config,并通过AddNLogWeb方法将NLog注册到ASP.NET Core中。

步骤三:在nlog.config文件中配置NLog

最后,需要在nlog.config文件中配置NLog,定义日志输出源及其相关参数:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      internalLogLevel="Info"
      internalLogFile="c:\temp\nlog-internal.log">

  <targets>
    <target name="console" xsi:type="ColoredConsole" layout="${longdate} ${uppercase:${level}} ${message} ${exception}" />

    <target xsi:type="File" name="file" fileName="logs/nlog.log"
            layout="${longdate} ${uppercase:${level}} ${message} ${exception}">
      <acrhiveAboveSize>1024000</acrhiveAboveSize>
      <maxArchiveFiles>10</maxArchiveFiles>
    </target>
  </targets>

  <rules>
    <logger name="*" minlevel="Trace" writeTo="console,file" />
  </rules>

</nlog>

上述代码片段的含义是,我们在targets节点中定义了日志输出的两个源,分别为ColoredConsole和File,并指定了文件名和一个布尔表达式,用于在日志切割时区分不同的日志文件。在rules节点中,我们将日志级别设置为Trace,并将日志输出到console和file两个源中。

步骤四:添加日志记录

最后,我们可以在应用程序中使用NLog来记录日志了,如下所示:

using Microsoft.Extensions.Logging;

public class SampleController : ControllerBase
{
    private readonly ILogger<SampleController> _logger;

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

    [HttpGet("test")]
    public IActionResult Test()
    {
        _logger.LogInformation("This is a test log.");
        return Ok();
    }
}

在上述代码中,我们通过构造函数注入ILogger接口并在Action方法中记录信息级别的日志。

以上是使用Serilog和NLog记录日志的完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ASP.NET Core记录日志 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • SpringBoot 集成 Druid过程解析

    SpringBoot 集成 Druid过程解析 Druid是一个高性能的数据库连接池和监控框架,而SpringBoot是一个轻量级的快速开发框架。在开发 SpringBoot 应用的同时,我们也需要使用数据库连接池来处理数据库访问。 在本文中,我们将详细介绍如何将 Druid 集成到 SpringBoot 项目中。我们将介绍以下内容: 在POM文件中添加Dr…

    Azure 2023年5月25日
    00
  • Win11 21H2 Build 22000.1165更新补丁KB5018483预览版发布(附更新内容大全)

    Win11 21H2 Build 22000.1165更新补丁KB5018483预览版发布 本文介绍最新的Win11 21H2 Build 22000.1165更新补丁KB5018483预览版的发布以及所包含的更新内容大全。 更新内容 该预览版更新内容主要包括以下改进和修复: 修复屏幕共享中出现的问题。 解决文件资源管理器在某些情况下无法正常工作的问题。 修…

    Azure 2023年5月26日
    00
  • 微软 Win11 Dev Build22572发布 增强搜索(附更新修复内容汇总)

    微软 Win11 Dev Build 22572发布 增强搜索 微软最近公布了 Windows 11的内部测试版 Dev Build22572,其中包含了许多新的功能和更新内容。本次更新中,微软特别增强了系统搜索功能,加入了更多的搜索选项和结果过滤方式,使用户可以更快速、更方便地查找到所需的文件、应用程序或设置项。 更新修复内容汇总 在Win11 Dev B…

    Azure 2023年5月26日
    00
  • WindowsServer2022正式版发布:镜像发布下载

    Windows Server 2022 正式版发布:镜像发布下载 简介 Windows Server 2022 正式版已于2021年8月18日发布。本文将为大家提供 Windows Server 2022 正式版的镜像下载地址和安装步骤,帮助大家快速获得该版本的体验。 镜像下载 Windows Server 2022 正式版的镜像下载链接如下: 官网链接:h…

    Azure 2023年5月25日
    00
  • Spring依赖注入和控制反转详情

    Spring依赖注入和控制反转 Spring框架是一个轻量级的依赖注入(Dependency Injection, DI)和控制反转(Inversion of Control, IOC)容器,它可以管理Java Bean对象之间的依赖关系,并在运行时将这些依赖关系注入到Bean中,使得Bean对象的逻辑更加清晰,并且易于测试和维护。 依赖注入(DI) 依赖注…

    Azure 2023年5月26日
    00
  • Windows Server 2016第三技术预览版新特性详解:容器是亮点

    Windows Server 2016第三技术预览版新特性详解:容器是亮点 什么是容器技术? 容器技术是创建和部署应用程序的一种方法,它可以使应用程序在不同的主机和操作系统之间进行移动。它通过将应用程序及其依赖打包成容器,让应用程序在运行时被限制在容器中而不是主机中,提高了应用程序的可移植性和可靠性。 Windows Server 2016中的容器技术 在W…

    Azure 2023年5月25日
    00
  • 202101最新win10教育版/专业版激活秘钥分享 附激活工具

    202101最新win10教育版/专业版激活秘钥分享 附激活工具完整攻略 简介 本文将详细讲解如何使用秘钥和激活工具激活win10教育版/专业版,包括秘钥获取、激活工具下载、激活步骤等内容。 预备知识 在开始操作前,请确保你已经下载并安装了win10教育版/专业版系统,并且能够正常启动。 秘钥获取 打开浏览器,访问https://msdn.itellyou.…

    Azure 2023年5月25日
    00
  • 快速掌握和使用Flyway的详细教程

    快速掌握和使用Flyway的详细教程 什么是Flyway? Flyway是一个开源的,轻量级的数据库版本控制工具,使用java语言实现,支持多种主流关系型数据库,如MySQL, Postgres, Oracle等。 在团队协作的开发中,数据库的版本控制变得越来越重要。Flyway就是为了解决这个问题而产生的。使用Flyway,开发人员能够轻松将数据库迁移管理…

    Azure 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部