广告
返回顶部
首页 > 资讯 > 精选 >ASP.NET Core如何使用NLog记录日志
  • 159
分享到

ASP.NET Core如何使用NLog记录日志

2023-06-29 17:06:25 159人浏览 八月长安
摘要

这篇文章主要介绍了asp.net Core如何使用NLog记录日志,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、前言在所有的应用程序中,日志功能是不可或缺的模块

这篇文章主要介绍了asp.net Core如何使用NLog记录日志,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一、前言

在所有的应用程序中,日志功能是不可或缺的模块,我们可以根据日志信息进行调试、查看产生的错误信息,在ASP.net core中我们可以使用log4net或者NLog日志组件来实现记录日志的功能,这里讲解如何在ASP.net core中使用NLog。

这里采用的是.Net Core 3.1创建应用程序。

那么什么是NLog呢?

NLog是一个基于.net平台编写的类库,我们可以使用NLog在应用程序中添加即为完善的跟踪调试代码。

NLog是一个简单灵活的.NET日志记录类库。通过使用NLog,我们可以在任何一种.NET语言中输出带有上下文的调试诊断信息,根据个人的爱好配置其输出的样式,然后发送到一个或多个输出目标(target)中。

NLog的api非常类似于log4net,且配置方式非常简单。NLog使用路由表进行配置,这样就让NLog的配置文件非常容易阅读,并便于今后维护。

NLog遵循BSD license,即允许商业应用且完全开放源代码。任何人都可以免费使用并对其进行测试,然后通过邮件列表反馈问题以及建议。

NLog支持.NET、C/C++以及COM组件,因此我们的程序、组件、包括用c++/COM编写的遗留模块都可以通过同一个路由引擎将信息发送至NLog中。

简单来说,NLog就是用来记录项目日志的组件。

二、使用NLog

首先我们创建一个webapi的项目:

ASP.NET Core如何使用NLog记录日志

1、引入NLog

直接在NuGet里面搜索NLog.WEB.Aspnetcore,然后进行安装即可,如下图所示:

ASP.NET Core如何使用NLog记录日志

安装完成以后在依赖项里面就可以看到了:

ASP.NET Core如何使用NLog记录日志

修改Program类,在里面配置使用NLog,代码如下所示:

using Microsoft.AspNetCore.Hosting;using Microsoft.Extensions.Hosting;using NLog.Web;namespace NLogDemo{    public class Program    {        public static void Main(string[] args)        {            CreateHostBuilder(args).Build().Run();        }        public static IHostBuilder CreateHostBuilder(string[] args) =>            Host.CreateDefaultBuilder(args)                .ConfigureWebHostDefaults(webBuilder =>                {                    webBuilder.UseStartup<Startup>();                })                // 配置使用NLog                .UseNLog();    }}

2、添加配置文件

右键添加新建项,然后选择Web配置文件,命名为nlog.config如下图所示:

ASP.NET Core如何使用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"      autoReload="true"      throwConfigExceptions="true"      internalLogLevel="info"      internalLogFile="E:\log\internal-nlog.txt">  <!--autoReload:修改后自动加载,可能会有延迟-->  <!--throwConfigExceptions:NLog日志系统抛出异常-->  <!--internalLogLevel:内部日志的级别-->  <!--internalLogFile:内部日志保存路径,日志的内容大概就是NLog的版本信息,配置文件的地址等等-->  <!--输出日志的配置,用于rules读取-->  <targets>    <!--write logs to file-->    <!--将日志写入文件中,fileName可以指定日志生成的路径-->    <target xsi:type="File" name="allfile" fileName="D:\Log\nlog-all-${shortdate}.log"             layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />     <!--同样是将文件写入日志中,写入的内容有所差别,差别在layout属性中体现。写入日志的数量有差别,差别在路由逻辑中体现-->    <target xsi:type="File" name="ownFile-web" fileName="D:\Log\nlog-my-${shortdate}.log"             layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />    <target xsi:type="Null" name="blackhole" />  </targets>  <rules>    <!--路由顺序会对日志打印产生影响。路由匹配逻辑为顺序匹配。-->    <!--All logs, including from Microsoft-->    <logger name="*" minlevel="Trace" writeTo="allfile" />    <!--Skip Microsoft logs and so log only own logs-->    <!--以Microsoft打头的日志将进入此路由,由于此路由没有writeTo属性,所有会被忽略-->    <!--且此路由设置了final,所以当此路由被匹配到时。不会再匹配此路由下面的路由。未匹配到此路由时才会继续匹配下一个路由-->    <logger name="Microsoft.*" minlevel="Trace"  final="true" />    <!--上方已经过滤了所有Microsoft.*的日志,所以此处的日志只会打印除Microsoft.*外的日志-->    <logger name="*" minlevel="Trace" writeTo="ownFile-web" />  </rules></nlog>

添加完配置文件以后,我们还需要修改配置文件的属性,设置为始终复制,如下图所示:

ASP.NET Core如何使用NLog记录日志

3、在控制器中使用

通过上面的步骤,我们已经完成NLog的配置,接下来我们就可以在控制器中使用了,通过构造函数注入的方式实现注入。控制器代码如下:

using Microsoft.AspNetCore.mvc;using Microsoft.Extensions.Logging;namespace NLogDemo.Controllers{    [Route("api/[controller]")]    [ApiController]    public class NLogTestController : ControllerBase    {        private readonly ILogger<NLogTestController> _logger;        public NLogTestController(ILogger<NLogTestController> logger)        {            _logger = logger;        }        [HttpGet]        public IActionResult Get()        {            _logger.LogError("这是错误信息");            _logger.LogDebug("这是调试信息");            _logger.LogInfORMation("这是提示信息");            return Ok();        }    }}

运行程序,访问nlogtest控制器,然后查看是否有日志生成:

ASP.NET Core如何使用NLog记录日志

我们在nlog.config里面配置的文件路径是D:\Log,从上面的截图中看到,有日志生成了 。这里生成了两个日志文件,这是因为我们在nlog.config里面配置的日志级别不同。日志内容如下:

ASP.NET Core如何使用NLog记录日志

可以看到,启动过程中的Microsoft日志也输出了,如果不想输出Microsoft日志,修改nlog.config里rules节点下面的路径规则顺序即可。

4、读取指定位置的配置文件

上面的例子中,我们是直接在项目的根目录下面添加的nlog.config文件,有时候我们想把程序里面的配置文件都放到单独的文件夹里面,这样方便管理,那么该如何设置让程序读取指定位置的nlog.config文件呢?看下面的例子。

新建一个文件夹,命名为XmlConfig,然后把nlog.config文件移到到XmlConfig文件夹下面,移到后的结构如下图所示:

ASP.NET Core如何使用NLog记录日志

然后修改Program文件,在程序里面设置读取XmlConfig文件夹下面的nlog.config文件,代码如下:

using Microsoft.AspNetCore.Hosting;using Microsoft.Extensions.Hosting;using NLog.Web;namespace NLogDemo{    public class Program    {        public static void Main(string[] args)        {            // 设置读取指定位置的nlog.config文件            NLogBuilder.ConfigureNLog("XmlConfig/nlog.config");            CreateHostBuilder(args).Build().Run();        }        public static IHostBuilder CreateHostBuilder(string[] args) =>            Host.CreateDefaultBuilder(args)                .ConfigureWebHostDefaults(webBuilder =>                {                    webBuilder.UseStartup<Startup>();                })                // 配置使用NLog                .UseNLog();    }}

这样就可以读取XmlConfig文件夹下面的配置文件了。

5、封装

上面的例子中,最后输出的日志格式是根据nlog.config配置文件里面的layout样式输出的,有时候输出的内容可能不满足我们的需求,我们可以对程序中的日志功能模块进行封装,输出我们自己定义的日志格式。

在解决方案中添加一个类库,命名为Nlog.Framework,然后在类库中添加一个Log文件夹,把所有Log相关的文件都放到该文件夹下,添加后的项目结构如下图所示:

ASP.NET Core如何使用NLog记录日志

添加LogMessage类,里面是要记录的一些信息属性字段:

using System;namespace Nlog.Framework.Log{    /// <summary>    /// 日志消息    /// </summary>    public class LogMessage    {        /// <summary>        /// IP        /// </summary>        public string IpAddress { get; set; }        /// <summary>        /// 操作人        /// </summary>        public string OperationName { get; set; }        /// <summary>        /// 操作时间        /// </summary>        public DateTime OperationTime { get; set; }        /// <summary>        /// 日志信息        /// </summary>        public string LogInfo { get; set; }        /// <summary>        /// 跟踪信息        /// </summary>        public string StackTrace { get; set; }    }}

添加一个格式化类,用来格式化日志输出内容:

using System.Text;namespace Nlog.Framework.Log{    /// <summary>    /// 格式化输出样式    /// </summary>    public class LogFormat    {        public static string ErrorFormat(LogMessage logMessage)        {            StringBuilder strInfo = new StringBuilder();            strInfo.Append("1. 操作时间: " + logMessage.OperationTime +" \r\n");            strInfo.Append("2. 操作人: " + logMessage.OperationName + " \r\n");            strInfo.Append("3. Ip  : " + logMessage.IpAddress +"\r\n");            strInfo.Append("4. 错误内容: " + logMessage.LogInfo + "\r\n");            strInfo.Append("5. 跟踪: " + logMessage.StackTrace + "\r\n");            strInfo.Append("-----------------------------------------------------------------------------------------------------------------------------\r\n");            return strInfo.ToString();        }    }}

这里使用依赖注入的方式,所以我们首先定义一个接口,代码如下:

using System;namespace Nlog.Framework.Log{    public interface INLogHelper    {        void LogError(Exception ex);    }}

然后定义接口的实现类,代码如下:

using Microsoft.AspNetCore.Http;using Microsoft.Extensions.Logging;using System;namespace Nlog.Framework.Log{    public class NLogHelper : INLogHelper    {        //public static Logger logger { get; private set; }        private readonly IHttpContextAccessor _httpContextAccessor;        private readonly ILogger<NLogHelper> _logger;        public NLogHelper(IHttpContextAccessor httpContextAccessor, ILogger<NLogHelper> logger)        {            _httpContextAccessor = httpContextAccessor;            _logger = logger;        }        public void LogError(Exception ex)        {            LogMessage logMessage = new LogMessage();            logMessage.IpAddress = _httpContextAccessor.HttpContext.Request.Host.Host;            if (ex.InnerException != null)                logMessage.LogInfo = ex.InnerException.Message;            else                logMessage.LogInfo = ex.Message;            logMessage.StackTrace = ex.StackTrace;            logMessage.OperationTime = DateTime.Now;            logMessage.OperationName = "admin";            _logger.LogError(LogFormat.ErrorFormat(logMessage));        }    }}

为了演示效果,我们添加一个全局异常过滤器,代码如下:

using Microsoft.AspNetCore.Mvc.Filters;using Nlog.Framework.Log;using System.Threading.Tasks;namespace NLogDemo.Filter{    /// <summary>    /// 异步版本自定义全局异常过滤器    /// </summary>    public class CustomerGlobalExceptionFilterAsync : IAsyncExceptionFilter    {        private readonly INLogHelper _logHelper;        public CustomerGlobalExceptionFilterAsync(INLogHelper logHelper)        {            _logHelper = logHelper;        }        /// <summary>        /// 重新OnExceptionAsync方法        /// </summary>        /// <param name="context">异常信息</param>        /// <returns></returns>        public Task OnExceptionAsync(ExceptionContext context)        {            // 如果异常没有被处理,则进行处理            if (context.ExceptionHandled == false)            {                // 记录错误信息                _logHelper.LogError(context.Exception);                // 设置为true,表示异常已经被处理了,其它捕获异常的地方就不会再处理了                context.ExceptionHandled = true;            }            return Task.CompletedTask;        }    }}

接着添加一个控制器,在控制器里面模拟发生错误的操作,代码如下:

using Microsoft.AspNetCore.Mvc;using Microsoft.Extensions.Logging;namespace NLogDemo.Controllers{    [Route("api/[controller]")]    [ApiController]    public class ValuesController : ControllerBase    {        /// <summary>        /// 日志        /// </summary>        private readonly ILogger<ValuesController> _logger;        public ValuesController(ILogger<ValuesController> logger)        {            _logger = logger;        }        [HttpGet]        public IActionResult Test()        {            _logger.LogError("测试封装日志");            int i = 0;            int result = 10 / i;            return Ok();        }    }}

修改Program类:

using Microsoft.AspNetCore.Hosting;using Microsoft.Extensions.Hosting;using NLog;using NLog.Web;using System;namespace NLogDemo{    public class Program    {        public static void Main(string[] args)        {            // 读取指定位置的配置文件            var logger = NLogBuilder.ConfigureNLog("XmlConfig/nlog.config").GetCurrentClassLogger();            try            {                logger.Info("Init Main");                CreateHostBuilder(args).Build().Run();            }            catch (Exception ex)            {                logger.Error(ex, "Stopped program because of exception");            }            finally            {                LogManager.Shutdown();            }        }        public static IHostBuilder CreateHostBuilder(string[] args) =>            Host.CreateDefaultBuilder(args)                .ConfigureWebHostDefaults(webBuilder =>                {                    webBuilder.UseStartup<Startup>();                })                // 配置使用NLog                .UseNLog();    }}

最后在Startup类里面注入:

public void ConfigureServices(IServiceCollection services){    #region 添加异常处理过滤器    services.AddControllers(options => options.Filters.Add(typeof(CustomerGlobalExceptionFilterAsync)));    #endregion    services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();    services.AddSingleton<INLogHelper, NLogHelper>();    // NLogHelper.LoadLogger();    services.AddControllers();}

这样就完成了一个简单的封装,运行程序,访问value控制器测试:

ASP.NET Core如何使用NLog记录日志

上面的例子中,只是封装了Error,如果是其他级别的日志,可以自己封装。

感谢你能够认真阅读完这篇文章,希望小编分享的“ASP.NET Core如何使用NLog记录日志”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: ASP.NET Core如何使用NLog记录日志

本文链接: https://www.lsjlt.com/news/325816.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • ASP.NET Core如何使用NLog记录日志
    这篇文章主要介绍了ASP.NET Core如何使用NLog记录日志,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、前言在所有的应用程序中,日志功能是不可或缺的模块...
    99+
    2023-06-29
  • ASP.NET Core记录日志
    目录1.前言2.添加日志提供程序3.创建日志3.1启动时(Startup)创建日志3.2在程序中(Program)创建日志4.Configuration5.日志级别6.内置日志记录提...
    99+
    2022-11-13
  • ASP.NETCore使用NLog记录日志
    目录一、前言二、使用NLog1、引入NLog2、添加配置文件3、在控制器中使用4、读取指定位置的配置文件5、封装一、前言 在所有的应用程序中,日志功能是不可或缺的模块,我们可以根据日...
    99+
    2022-11-13
  • ASP.NETCore使用NLog输出日志记录
    ASP.NET Core 中的日志记录 https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/logging/view=...
    99+
    2022-11-13
  • ASP.NET Core怎么添加记录日志
    这篇文章主要介绍了ASP.NET Core怎么添加记录日志的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ASP.NET Core怎么添加记录日志文章都会有所收获,下面我们一起来看看吧。1.前...
    99+
    2023-06-29
  • ASP.NET Core如何使用Log4net实现日志记录功能
    这篇文章主要介绍“ASP.NET Core如何使用Log4net实现日志记录功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ASP.NET Core如何使用Log4net实现日...
    99+
    2023-06-29
  • .Net Core 使用NLog记录日志到文件和数据库的操作方法
    NLog 记录日志是微软官方推荐使用。 接下来,通过配置日志记录到文件和Sql Server数据库。 第一步:首先添加包NLog.Config (可通过微软添加包命令Install-...
    99+
    2022-11-12
  • 如何在ASP.NET应用程序中记录日志?
    ASP.NET 是一种流行的 Web 应用程序框架,它提供了丰富的功能和工具,让开发者可以更加轻松地创建复杂的 Web 应用程序。在开发 ASP.NET 应用程序时,记录日志是非常重要的一项任务。记录日志可以帮助开发者在应用程序出现问题时快...
    99+
    2023-07-20
    并发 spring 日志
  • ASP.NET Core使用自定义日志中间件
    这个日志框架使用的是ASP.NET Core的NLog,用来记录每次请求信息和返回信息。 1.首先创建一个Web应用项目,我选择的是MVC模板: 2.使用NuGet添加Micros...
    99+
    2022-11-13
  • 如何使用Java重定向日志接口记录日志?
    当我们开发一个Java应用程序时,记录日志是非常重要的一个环节。Java提供了多种日志框架,如Log4j、Logback等。其中,重定向日志接口是一种常用的记录日志的方式。 在这篇文章中,我们将介绍如何使用Java重定向日志接口记录日志。我...
    99+
    2023-11-05
    重定向 日志 接口
  • C#使用log4net记录日志
    一、Nuget安装log4net --> Install-Package log4net 二、在AssemblyInfo.cs文件中添加log4net.dll的参数。 [a...
    99+
    2022-11-12
  • Spring Boot如何使用AOP记录日志
    小编给大家分享一下Spring Boot如何使用AOP记录日志,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在项目开发中经常,日...
    99+
    2022-10-19
  • Java中如何使用Git记录日志?
    Git是一种流行的版本控制工具,可以追踪代码的变化并记录代码的历史。Java开发者可以使用Git来管理项目,并使用Git记录项目的日志。本文将介绍如何在Java中使用Git记录日志。 一、Git的基本概念 在开始介绍如何在Java中使用G...
    99+
    2023-07-06
    git 日志 编程算法
  • Python中如何使用numpy记录日志?
    Python是一种广泛使用的编程语言,其强大的数据处理能力和丰富的第三方库使其成为数据科学和机器学习领域的首选语言。在这些应用程序中,记录日志是一个非常重要的任务,因为它可以帮助开发人员找到应用程序中的错误并进行适当的修复。在本文中,我们将...
    99+
    2023-08-10
    numpy 日志 linux
  • ASP.NET Core扩展库之Http日志的使用详解
    目录一、开启服务端请求日志 二、开启客户端请求日志 三、示例     最佳实践都告诉我们不要记录请求的详细日志,因为这有安全问题,但在实际开发...
    99+
    2022-11-12
  • 如何使用 Git 记录 PHP 项目日志?
    Git 是一款强大的版本控制工具,它可以帮助我们记录项目的历史变更,同时也是开源社区中广泛使用的工具。对于 PHP 开发者来说,如何使用 Git 记录项目日志是一个非常重要的问题。在本文中,我们将介绍如何使用 Git 记录 PHP 项目日志...
    99+
    2023-09-07
    npm git 日志
  • C#中使用MicrosoftUnity记录日志
    需要记录日志的地方包括:进入方法的时候,传参的时候,统计执行时间,方法返回参数的时候,退出语句块的时候,出现异常的时候,等等。先来体验不使用Micirosoft Unity进行日志记...
    99+
    2022-11-13
  • 使用Log4net进行日志记录
    首先说说为什么要进行日志记录。在一个完整的程序系统里面,日志系统是一个非常重要的功能组成部分。它可以记录下系统所产生的所有行为,并按照某种规范表达出来。我们可以使用日志系统所记录的信...
    99+
    2022-11-12
  • ASP.NET Core扩展库之日志功能的使用详解
    目录一、简介 二、使用 三、配置 四、配置日志级别 五、日志级别的动态修改 六、本地文件日志配置 七、容器化支持 八、测试支持 九、禁用Serilog  &nbs...
    99+
    2022-11-11
  • Spring应用:如何使用Git记录Go日志?
    日志是开发过程中非常重要的一环,它可以帮助我们定位问题,了解应用的运行情况。而Git是目前最流行的版本控制工具之一,它可以帮助我们管理代码变更。那么,如何在Spring应用中使用Git记录Go日志呢? 下面,我们将介绍如何在Spring应...
    99+
    2023-08-05
    日志 spring git
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作