分享一个 .NET Core Console 项目中应用 NLog 写日志的详细例子

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 分享一个 .NET Core Console 项目中应用 NLog 写日志的详细例子

前言

日志在软件开发中扮演着非常重要的角色,通常我们用它来记录应用程序运行时发生的事件、错误信息、警告以及其他相关信息,帮助在调试和排查问题时更快速地定位和解决 Bug。

通过日志,我们可以做到:

  1. 故障排除和调试:帮助追踪程序的运行情况,定位问题并进行故障排除。
  2. 性能监控:通过日志记录关键性能指标,可以很方便地监控程序的性能并进行优化。
  3. 安全性:记录潜在的安全问题,帮助及时发现并解决安全漏洞。
  4. 审计和合规性:记录程序的行为,追踪用户的操作记录,确保操作合规性。

NLog 是一个流行的开源日志记录库,用于 .NET 平台的应用程序,可以通过配置文件或代码进行配置,支持多种日志输出方式,如文件、数据库、控制台、网络等,在不影响应用程序性能的情况下进行日志记录,是 .NET 程序员的好助手。

今天分享一个在 .NET Core Console 项目中如果配置和应用 NLog 写日志的详细例子。

Step By Step 步骤

  1. 下载 Nuget 包
Microsoft.Extensions.DependencyInjection
NLog.Extensions.Logging

2.添加 nlog.config 文件,并设置 复制到输出目录-如果较新则复制

内容见《附录:NLog.config 内容》

3.在 Program.cs 注入 NLog 服务(留意注释

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

// 注入 NLog 服务
services.AddLogging(loggingBuilder => {
  loggingBuilder.ClearProviders();
  loggingBuilder.SetMinimumLevel(LogLevel.Information);
  loggingBuilder.AddNLog();
});

4.新建一个 NetUtil.cs(留意注释

using Microsoft.Extensions.Logging;

class NetUtil
{
   private readonly ILogger<NetUtil> logger;

  // 构造方法注入 IOptionsSnapshot
  public NetUtil(ILogger<NetUtil> logger)
  {
    this.logger = logger;
  }

  // 在方法中写日志内容
  public async Task Test()
  {
    try
    {
      logger.LogInformation("Starting get data....");
    }
    catch (Exception ex)
    {
      logger.LogError(ex, "Error occurred when getting dashboard data.");
    }
  }
}

5.在 Program.cs 调用 NetUtil 中的方法(留意注释

// 注入 NetUtil 类
services.AddScoped<NetUtil>();

// 调用 NetUtil 类方法,里面有调用 NLog 方法
using (var sp = services.BuildServiceProvider())
{
  // 建立了一个无限循环
  using (var scope = sp.CreateScope())
  {
    var spScope = scope.ServiceProvider;
    var demo = spScope.GetRequiredService<NetUtil>();
    await demo.Test();
  }
}

6.运行程序,即可在程序输出目录如 Debug 中 logs 目录看到生成的日志文件

附录:完整的 Program.cs 代码

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

// 注入 NLog 服务
services.AddLogging(loggingBuilder => {
  loggingBuilder.ClearProviders();
  loggingBuilder.SetMinimumLevel(LogLevel.Information);
  loggingBuilder.AddNLog();
});

// 注入 NetUtil 类
services.AddScoped<NetUtil>();

// 调用 NetUtil 类方法,里面有调用 NLog 方法
using (var sp = services.BuildServiceProvider())
{
  using (var scope = sp.CreateScope())
  {
    var spScope = scope.ServiceProvider;
    var demo = spScope.GetRequiredService<NetUtil>();
    await demo.Test();
  }
}

附录: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"
    autoReload="true"
    internalLogLevel="Warn"
    internalLogFile="internal-nlog.txt">

  <!-- define various log targets -->
  <targets>
    <!-- write logs to file -->
    <target xsi:type="File" name="allfile" fileName="logs/nlog-all-${shortdate}.log"
        layout="${longdate} ${uppercase:${level}} [${logger}] ${message} ${exception}"
        maxArchiveDays="3"
        maxArchiveFiles="10" />

    <target xsi:type="File" name="ownFile-web" fileName="logs/nlog-info-${shortdate}.log"
        layout="${longdate} ${uppercase:${level}} [${logger}] ${message} ${exception}"
        maxArchiveDays="3"
        maxArchiveFiles="10" />

    <target xsi:type="Null" name="blackhole" />
  </targets>

  <rules>
    <!--Skip Microsoft logs and so log only own logs-->
    <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
    <!--All logs, including from Microsoft-->
    <logger name="*" minlevel="Trace" writeTo="allfile" />
    <logger name="*" minlevel="Info" writeTo="ownFile-web" />
  </rules>
</nlog>

最后

通过使用 NLog 这样的日志记录库,我们可以更轻松地实现日志记录功能,提高应用程序的可靠性和可维护性。

您觉得 NLog 怎么样呢?欢迎留言讨论。

我是老杨,一个奋斗在一线的资深研发老鸟,让我们一起聊聊技术,聊聊人生。

都看到这了,求个点赞、关注、在看三连呗,感谢支持。


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
4天前
|
开发框架 网络协议 .NET
C#/.NET/.NET Core优秀项目和框架2024年10月简报
C#/.NET/.NET Core优秀项目和框架2024年10月简报
|
7天前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
11天前
|
存储 SQL 监控
|
11天前
|
自然语言处理 监控 数据可视化
|
20天前
|
JSON 算法 安全
JWT Bearer 认证在 .NET Core 中的应用
【10月更文挑战第30天】JWT(JSON Web Token)是一种开放标准,用于在各方之间安全传输信息。它由头部、载荷和签名三部分组成,用于在用户和服务器之间传递声明。JWT Bearer 认证是一种基于令牌的认证方式,客户端在请求头中包含 JWT 令牌,服务器验证令牌的有效性后授权用户访问资源。在 .NET Core 中,通过安装 `Microsoft.AspNetCore.Authentication.JwtBearer` 包并配置认证服务,可以实现 JWT Bearer 认证。具体步骤包括安装 NuGet 包、配置认证服务、启用认证中间件、生成 JWT 令牌以及在控制器中使用认证信息
|
1月前
|
开发框架 前端开发 API
C#/.NET/.NET Core优秀项目和框架2024年9月简报
C#/.NET/.NET Core优秀项目和框架2024年9月简报
|
1月前
|
存储 消息中间件 前端开发
.NET常见的几种项目架构模式,你知道几种?
.NET常见的几种项目架构模式,你知道几种?
|
1月前
|
边缘计算 开发框架 人工智能
C#/.NET/.NET Core优秀项目和框架2024年8月简报
C#/.NET/.NET Core优秀项目和框架2024年8月简报
|
2月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
41 7
|
2月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
58 0

热门文章

最新文章