视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
ASP.NET Core与NLog集成的完整步骤
2020-11-27 22:35:03 责编:小采
文档

前言

一直很喜欢 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"
     ]
    }

    总结

    下载本文
    显示全文
    专题