ASP.NET Core 2.1 内置日志、使用 NLog 将日志输出到文件

技术解码器 2019-06-20 ⋅ 33 阅读

Introduction

在开发 ASP.NET Core 应用程序时,我相信大部分开发者都会遇到需要记录日志的需求。好的日志系统能够帮助我们追踪问题、进行故障排除,并提供可靠的记录。ASP.NET Core 2.1 提供了内置的日志系统,同时也支持第三方日志库的集成。本文将介绍如何在 ASP.NET Core 2.1 中使用内置日志框架,并结合 NLog 将日志输出到文件。

内置日志系统

ASP.NET Core 2.1 提供了一个简单而灵活的内置日志系统。它基于 Microsoft.Extensions.Logging 抽象库构建,可以通过 ILogger 接口在应用程序中记录日志。我们可以通过向 ILogger 实例传递不同的 Category 和日志级别来实现灵活的日志记录。

ASP.NET Core 2.1 内置的日志系统默认提供了控制台和调试器的输出提供程序。我们可以配置应用程序使用不同的输出提供程序,例如将日志记录到文件、数据库或第三方日志分析工具。

集成 NLog

NLog 是一个流行的日志记录库,支持多种输出目标,包括文件、数据库、邮件等。它具有灵活的配置选项,可以满足各种日志记录需求。

首先,我们需要安装 NLog 包。在项目的 NuGet 管理器控制台中运行以下命令:

Install-Package NLog

接下来,我们需要创建 NLog 配置文件(通常命名为 NLog.config),定义日志输出的目标和格式。下面是一个简单的例子:

<?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">

    <targets>
        <target name="file" xsi:type="File" fileName="logs.log" />
    </targets>

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

</nlog>

在以上示例中,我们定义了一个将日志记录到 logs.log 文件的目标(File),并将所有日志级别(Trace)的日志都写入该目标。

在 ASP.NET Core 2.1 中配置 NLog

首先,我们需要在 Startup.cs 文件中进行相应的配置。

public class Startup
{
    public IConfiguration Configuration { get; }

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

    public void ConfigureServices(IServiceCollection services)
    {
        // 配置NLog作为日志记录器
        services.AddSingleton<ILoggerManager, LoggerManager>();
        
        // 其他服务的配置...
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        // 添加NLog到.NET Core日志工厂
        loggerFactory.AddNLog();

        // 配置NLog的路径
        env.ConfigureNLog("NLog.config");

        // 其他中间件的配置...
    }
}

在以上示例中,我们首先在 ConfigureServices 方法中配置了 NLog 作为日志记录器,并将 ILoggerManager 注册为一个单例服务。然后,在 Configure 方法中,我们使用 loggerFactory.AddNLog() 添加 NLog 到 ASP.NET Core 的日志工厂中。并通过 env.ConfigureNLog("NLog.config") 指定了 NLog 配置文件的路径。

我们还需要定义一个 ILoggerManager 接口,用于注入并执行日志记录。

public interface ILoggerManager
{
    void LogInformation(string message);
    void LogWarning(string message);
    void LogError(string message);
    void LogDebug(string message);
}

最后,我们需要创建一个 LoggerManager 类实现 ILoggerManager 接口,并使用 NLog 进行具体的日志记录。

public class LoggerManager : ILoggerManager
{
    private static readonly ILogger logger = LogManager.GetCurrentClassLogger();

    public void LogInformation(string message)
    {
        logger.Info(message);
    }

    public void LogWarning(string message)
    {
        logger.Warn(message);
    }

    public void LogError(string message)
    {
        logger.Error(message);
    }

    public void LogDebug(string message)
    {
        logger.Debug(message);
    }
}

使用日志

现在我们可以在我们的 ASP.NET Core 2.1 应用程序中使用日志了。在需要记录日志的地方,我们只需注入 ILoggerManager 并调用相应的方法即可。

public class MyController : Controller
{
    private readonly ILoggerManager _logger;

    public MyController(ILoggerManager logger)
    {
        _logger = logger;
    }

    public IActionResult Index()
    {
        _logger.LogInformation("调用了 Index 方法");

        return View();
    }
}

现在,当我们在应用程序中调用 Index 方法时,NLog 将相应的日志信息记录到指定的日志文件中。

结论

ASP.NET Core 2.1 提供了一个内置的日志系统,可以轻松地记录日志并进行故障排除。通过集成 NLog,我们可以将日志输出到文件、数据库或其他目标。在本文中,我们介绍了如何配置和使用 NLog 在 ASP.NET Core 2.1 中输出日志到文件中。希望本文能够帮助您更好地理解和使用 ASP.NET Core 的日志系统。


全部评论: 0

    我有话说: