ASP.NET Core与NLog集成的完整步骤

前言

一直很喜欢 NLog 的简洁和扩展性,所以准备将 ASP.NET Core 提供的默认日志提供程序替换成 NLog。

NLog 是一个跨平台的 .Net 日志组件。

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

下面话不多说了,来一起看看详细的介绍吧。

步骤 1

在项目的project.json中添加依赖NLog.Extensions.Logging:

"dependencies": {
 "NLog.Extensions.Logging": "1.0.0-*"
}

或者通过NuGet程序包管理器添加。

步骤 2

在ASP.NET Core的启动类Startup的Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)方法中添加:

// using NLog.Extensions.Logging;

loggerFactory.AddNLog();
//needed for non-NETSTANDARD platforms: configure nlog.config in your project root
env.ConfigureNLog("nlog.config");

步骤 3

在项目目录下添加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="Warn"
  internalLogToTrace="true"
  internalLogFile="AppData/Logs/NLogInternal.log">

 <!--
 - 日志文件被放置于 AppData/Logs 文件夹中,文件名为 {日志类目}.log 或 {日志类目}.err
 - 日志按天存档,放置于 AppData/Logs/Archives/{日志类目} 文件夹中,文件名为 {日期}.log 或 {日期}.err
 -->
 <targets>
 <!-- 通过 System.Diagnostics.Trace 输出由 EF 6 产生的数据库日志可以在 VS 输出窗口看到 -->
 <target name="XXX.Entities.AppDbContext.DatabaseLog.Trace"
   xsi:type="Trace"
   layout="${message}"
   />
 <!-- 在控制台输出由 EF 6 产生的数据库日志 -->
 <target name="XXX.Entities.AppDbContext.DatabaseLog.Console"
   xsi:type="Console"
   layout="${message}"
   />
 <!-- 在日志文件输出由 EF 6 产生的数据库日志 -->
 <target name="XXX.Entities.AppDbContext.DatabaseLog.File"
   xsi:type="File"
   layout="${message}"
   encoding="utf-8"
   archiveNumbering="Date"
   archiveEvery="Day"
   archiveDateFormat="yyyy-MM-dd"
   archiveFileName="AppData/Logs/Archives/XXX.Entities.AppDbContext.Database/{#}.log"
   fileName="AppData/Logs/XXX.Entities.AppDbContext.Database.log"
   />
 <!-- 常规的 Trace 输出,调试时可以在 VS 输出窗口看到 -->
 <target name="TRACE"
   xsi:type="Trace"
   layout="[${longdate}] ${pad:padding=-5:inner=${level:uppercase=true}} ${logger}: ${newline}${message}${onexception:inner=${newline}${exception:format=ToString}}${newline}" />
 <!-- 常规的控制台输出 -->
 <target name="CONSOLE"
   xsi:type="Console"
   layout="[${longdate}] ${pad:padding=-5:inner=${level:uppercase=true}} ${logger}: ${newline}${message}${onexception:inner=${newline}${exception:format=ToString}}${newline}" />
 <!-- 常规的日志文件输出 -->
 <target name="LOG_FILE"
   xsi:type="File"
   layout="[${longdate}] ${pad:padding=-5:inner=${level:uppercase=true}} ${logger}: ${newline}${message}${onexception:inner=${newline}${exception:format=ToString}}${newline}"
   encoding="utf-8"
   archiveNumbering="Date"
   archiveEvery="Day"
   archiveDateFormat="yyyy-MM-dd"
   archiveFileName="AppData/Logs/Archives/${filesystem-normalize:inner=${logger}}/{#}.log"
   fileName="AppData/Logs/${filesystem-normalize:inner=${logger}}.log" />

 <!-- 约定以 err 为文件后缀的日志文件记录了程序输出的警告或者错误。 -->
 <target name="ERROR_LOG_FILE"
   xsi:type="File"
   layout="[${longdate}] ${pad:padding=-5:inner=${level:uppercase=true}} ${logger}: ${newline}${message}${onexception:inner=${newline}${exception:format=ToString}}${newline}"
   encoding="utf-8"
   archiveNumbering="Date"
   archiveEvery="Day"
   archiveDateFormat="yyyy-MM-dd"
   archiveFileName="AppData/Logs/Archives/${filesystem-normalize:inner=${logger}}/{#}.err"
   fileName="AppData/Logs/${filesystem-normalize:inner=${logger}}.err" />

 </targets>

 <rules>
  <!-- 记录所有日志级别不低于 Warn 的日志到日志文件 -->
  <logger name="*" minlevel="Warn" writeTo="ERROR_LOG_FILE" />
  <!-- 记录 EF 生成的 SQL 语句 -->
  <logger name="XXX.Entities.AppDbContext.DatabaseLog" minlevel="Debug"
    writeTo="XXX.Entities.AppDbContext.DatabaseLog.Trace,XXX.Entities.AppDbContext.DatabaseLog.Console,XXX.Entities.AppDbContext.DatabaseLog.File" final="true" />
 <!-- 除非调试需要,把 .NET Core 程序集的 Debug 输出都屏蔽 -->
  <logger name="Microsoft.*" minLevel="Info" writeTo="CONSOLE,TRACE,LOG_FILE" final="true" />
  <!-- 除非调试需要,把系统的 Debug 输出都屏蔽 -->
  <logger name="System.*" minLevel="Info" writeTo="CONSOLE,TRACE,LOG_FILE" final="true" />
  <!-- 记录应用程序的 Debug 输出 -->
  <logger name="MyApplication.*" minlevel="Debug" writeTo="TRACE,CONSOLE,LOG_FILE" />
 </rules>
</nlog>

NLog 配置文件属性解读:

  • autoReload 是否监视配置文件的变化并自动加载。
  • throwConfigExceptions 是否在配置出错时抛出异常。
  • internalLogLevel NLog 内部日志级别。
  • internalLogToTrace 是否将 NLog 内部日志输出到 Trace。
  • internalLogFile NLog 内部日志输出到文件的路径。

步骤 4

在project.json文件中的publishOptions.include节内添加"nlog.config":

"publishOptions": {
 "include": [
 "wwwroot",
 "Views",
 "Areas/**/Views",
 "appsettings.json",
 "web.config",

 "nlog.config"
 ]
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • 使用NLog给Asp.Net Core做请求监控的方法

    为了减少由于单个请求挂掉而拖垮整站的情况发生,给所有请求做统计是一个不错的解决方法,通过观察哪些请求的耗时比较长,我们就可以找到对应的接口.代码.数据表,做有针对性的优化可以提高效率.在 asp.net web api 中我们可以通过注册一个 DelegatingHandler 来实现该功能.那在 asp.net core 中该如何实现呢? 一:比较 asp.net web api 和 asp.net core 的请求管道 观察这两张图,可以发现他们非常的相似,都是管道式的设计,在 asp.ne

  • ASP.NET Core开发教程之Logging利用NLog写日志文件

    前言 本文主要介绍了ASP.NET Core 开发-Logging 使用NLog 写日志文件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 NLog 可以适用于 .NET Core 和 ASP.NET Core . ASP.NET Core已经内置了日志支持,可以轻松输出到控制台. 学习Logging 组件的相关使用,使用NLog 将日志写入到文件记录. Logging 使用 新建一个 ASP.NET Core 项目,为了方便,我选择Web 应用程序,改身份验证 改为

  • Asp.Net Core用NLog记录日志操作方法

    需求 1.日志自动写入到数据库.写入到文件 2.appsettings.json数据库连接更改后,不需要去改NLog中的连接地址,启动网站或项目时自动检测变动然后去更改,以appsettings.json为准,保持同步. 3.写入日志时,除了NLog自带的字段,新增LogType自定义字段记录日志类型,例如网站日志.中间件日志等 4.统一的写日志方法,不用每次get一个logger对象(或依赖注入)来记日志 安装包 在nuget中安装NLog和NLog.Web.AspNetCore ,这两个是N

  • ASP.NET Core与NLog集成的完整步骤

    前言 一直很喜欢 NLog 的简洁和扩展性,所以准备将 ASP.NET Core 提供的默认日志提供程序替换成 NLog. NLog 是一个跨平台的 .Net 日志组件. NLog 遵从 BSD license,即允许商业应用且完全开放源代码.任何人都可以免费使用并对其进行测试,然后通过邮件列表反馈问题以及建议. 下面话不多说了,来一起看看详细的介绍吧. 步骤 1 在项目的project.json中添加依赖NLog.Extensions.Logging: "dependencies":

  • Asp.Net Core中发送Email的完整步骤

    前言 在项目开发中常常会需要做发送 Email 的功能,在 ASP.NET Core 中你可以用 MailKit 来实现 Email 的发送,MailKit 是一个开源的客户端库,可用在 Windows,Linux 或者 Mac 上,本篇文章就来讨论在 ASP.NET Core 中去实现. 安装 MailKit 要想使用 MailKit,你可以使用 Visual Studio 2019 中的 NuGet package manager 可视化界面进行安装,或者通过 NuGet package m

  • ASP.NET Core使用NLog记录日志

    目录 一.前言 二.使用NLog 1.引入NLog 2.添加配置文件 3.在控制器中使用 4.读取指定位置的配置文件 5.封装 一.前言 在所有的应用程序中,日志功能是不可或缺的模块,我们可以根据日志信息进行调试.查看产生的错误信息,在ASP.NET Core中我们可以使用log4net或者NLog日志组件来实现记录日志的功能,这里讲解如何在ASP.NET Core中使用NLog. 这里采用的是.NET Core 3.1创建应用程序. 那么什么是NLog呢? NLog是一个基于.NET平台编写的

  • ASP.NET Core使用NLog输出日志记录

    ASP.NET Core 中的日志记录 https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/logging/?view=aspnetcore-2.1 日志级别:Trace ->Debug-> Information ->Warning-> Error-> Critical 级别包含范围由大到小 ,如 Trace 就包含了所有信息. 基础用法 public class HomeController : Contro

  • 图析ASP.NET Core引入gRPC服务模板

    早就听说ASP.NET Core 3.0中引入了gRPC的服务模板,正好趁着家里电脑刚做了新系统,然后装了VS2019的功夫来体验一把.同时记录体验的过程.如果你也想按照本文的步骤体验的话,那你得先安装.NET Core3.0预览版的SDK.至于开发工具我用的时VS2019,当然你也可以使用VS Code进行. gRPC的简单介绍 gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架. 有关 gRPC 基础知识的详细信息,请参阅 gRPC 文档页. gRPC 的主要优点是: 现代高性

  • Asp.net Core中实现自定义身份认证的示例代码

    Asp.Net Core中虽然集成了许多常用的身份认证,但很多时候,我们还是需要实现自己的身份认证接口,本文这里就简单的介绍下如何实现自定义身份认证接口. 首先写一个简单的接口. [Authorize] [HttpGet] public object Foo() { return DateTime.Now.ToString(); } 由于有Authorize标记,访问函数体前会判断用户是否通过认证,由于这里没有通过认证,会的得到一个500错误. 自定义认证处理类: 实现一个IAuthentica

  • ASP.NET Core使用自定义日志中间件

    这个日志框架使用的是ASP.NET Core的NLog,用来记录每次请求信息和返回信息. 1.首先创建一个Web应用项目,我选择的是MVC模板: 2.使用NuGet添加Microsoft.Extensions.Logging和NLog.Extensions.Logging 3.修改Configure方法: public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFac

  • ASP.NET Core中预压缩静态文件的方法步骤

    前言 Web应用程序的优化是非常重要,因为使用更少的CPU,占用更少的带宽可以减少项目的费用. 在ASP.NET Core中我们可以很容易的启用响应压缩,但是针对预压缩文件,就需要做一些额外的功能了. 这篇博客文章展示了如何在ASP.NET Core中预压缩静态文件. 下面话不多说了,来一起看看详细的介绍吧 为什么需要预压缩文件? 虽然在从服务器请求文件时, 我们可以动态压缩文件,但这意味这Web服务器需要做更多的额外工作. 其实只有在新的应用程序部署时才会更改要压缩的文件. 越好的压缩效果需要

随机推荐