.net core 3.1 使用nlog记录日志 NLog.Web.AspNetCore
背景
.net core 中已经集成了log的方法, 但是只能控制台输出不能写入文件等等. 常见第三方的的日志工具包括log4net, nlog等等, 本文介绍nlog
一. 引用程序集, nuget 安装NLog.Web.AspNetCore

二. 创建nlog.config配置文件, 可以直接复制下面的配置文件内容
具体的配置说明 可以参考 https://www.cjavapy.com/article/183/
<?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="Off"
internalLogFile="c:\temp\internal-nlog.txt"> <!-- enable asp.net core layout renderers -->
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
</extensions> <!-- the targets to write to -->
<targets>
<!-- write logs to file -->
<target xsi:type="File" name="allfile" fileName="${basedir}/logs/${logger}/${shortdate}.log"
layout="${longdate} ${level:uppercase=true} ${event-context:item=Action} ${message} ${event-context:item=Amount} ${stacktrace} ${newline} ${exception:format=tostring} ${newline}" /> <!-- another file log, only own logs. Uses some ASP.NET core renderers -->
<target xsi:type="Debugger" name="debugger" layout="${date:format=HH\:mm\:ss.fff}: ${message}" />
</targets> <!-- rules to map from logger name to target -->
<rules>
<!--Skip non-critical Microsoft logs and so log only own logs-->
<logger name="Microsoft.*" maxlevel="Error" final="true" />
<logger name="*" minlevel="Debug" writeTo="debugger" />
<logger name="*" minlevel="Info" writeTo="allfile" />
</rules>
</nlog>
三. Program.cs 注入, UseNLog()
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.UseNLog();// 添加这句 注入nlog
四. 控制器里使用
/// <summary>
/// 日志
/// </summary>
private readonly ILogger<DemoController> _logger; /// <summary>
/// 构造函数
/// </summary>
/// <param name="logger"></param>
public DemoController(ILogger<DemoController> logger)
{
_logger = logger;
} public IActionResult Test()
{
_logger.LogError("我是日志内容");
return Ok("ok");
}
结果
在输出里面会有结果

也可以在日志文件里看见

五. 封装
虽然.net core 推荐依赖注入, 但是这种使用方式还是会不方便, 所以我可以封装成一个类, 需要的时候直接用. 代码如下:
/// <summary>
/// Nlog日志帮助类
/// Trace 包含大量的信息,例如 protocol payloads。一般仅在开发环境中启用, 仅输出不存文件。
/// Debug 比 Trance 级别稍微粗略,一般仅在开发环境中启用, 仅输出不存文件。
/// Info 一般在生产环境中启用。
/// Warn 一般用于可恢复或临时性错误的非关键问题。
/// Error 一般是异常信息。
/// Fatal - 非常严重的错误!
/// </summary>
public class NLogHelper
{
readonly Logger logger; private NLogHelper(Logger logger)
{
this.logger = logger;
} /// <summary>
/// 自定义 ${logger} (我用于区分文件夹)
/// </summary>
/// <param name="name"></param>
public NLogHelper(string name) : this(NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetLogger(name))
{
} /// <summary>
/// 默认 ${logger} (Default 文件夹下)
/// </summary>
public static NLogHelper Default { get; private set; }
static NLogHelper()
{
Default = new NLogHelper(NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetLogger("Default"));
} public void Debug(string msg, params object[] args)
{
logger.Debug(msg, args);
}
public void Debug(string msg, Exception err)
{
logger.Debug(err, msg);
} public void Info(string msg, params object[] args)
{
logger.Info(msg, args);
} public void Info(string msg, Exception err)
{
logger.Info(err, msg);
} public void Trace(string msg, params object[] args)
{
logger.Trace(msg, args);
} public void Trace(string msg, Exception err)
{
logger.Trace(err, msg);
} public void Error(string msg, params object[] args)
{
logger.Error(msg, args);
} public void Error(string msg, Exception err)
{
logger.Error(err, msg);
} public void Fatal(string msg, params object[] args)
{
logger.Fatal(msg, args);
} public void Fatal(string msg, Exception err)
{
logger.Fatal(err, msg);
}
}
使用方式
public IActionResult Test()
{
NLogHelper.Default.Fatal("默认logger");
new NLogHelper("Diy").Error("自定义logger");
return Ok("ok");
}
参考文献: https://github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-3
.net core 3.1 使用nlog记录日志 NLog.Web.AspNetCore的更多相关文章
- asp.net core 使用NLog记录日志到txt文件
一.使用VisualStudioCode创建一个webapi项目(也可以是mvc等).一个类库(用于封装记录日志方法,当然如果使用依赖注入到控制台项目,就不需要此类库了). 二.在类库中添加NLog. ...
- ASP.NET Core使用NLog记录日志到Microsoft Sql Server
在之前的文章中介绍了如何在ASP.NET Core使用NLog,本文为您介绍在ASP.NET Core使用NLog记录到Microsoft Sql Server 1.我们需要添加依赖: NLog.We ...
- Asp.Net Core中使用NLog记录日志
2019/10/28, Asp.Net Core 3.0, NLog 4.6.7, NLog.Web.AspNetCore 4.9.0 摘要:NLog在asp.net网站中的使用,NLog日志写入数据 ...
- ASP.NET Core:ASP.NET Core中使用NLog记录日志
一.前言 在所有的应用程序中,日志功能是不可或缺的模块,我们可以根据日志信息进行调试.查看产生的错误信息,在ASP.NET Core中我们可以使用log4net或者NLog日志组件来实现记录日志的功能 ...
- Core 2.0使用Nlog记录日志+Mysql
一.先创建一个Core2.0的项目,并在NuGet中引入3个类库文件 MySql.Data.dll NLog.dll NLog.Web.AspNetCore.dll 二.创建一个nlog.config ...
- .Net Core使用NLog记录日志
参见:https://github.com/NLog/NLog.Web/wiki/Getting-started-with-ASP.NET-Core-2 大致步骤: Nuget中引用NLog及NLog ...
- ASP.NET Core使用NLog记录日志
1.根目录新建nlog.config配置文件 <?xml version="1.0"?> <nlog xmlns="http://www.nlog-pr ...
- .Net Core 使用NLog记录日志到文件和数据库
NLog 记录日志是微软官方推荐使用. 接下来,通过配置日志记录到文件和Sql Server数据库. 第一步:首先添加包NLog.Config (可通过微软添加包命令Install-Package 包 ...
- 在.net core web 项目中使用Nlog记录日志
第1步,添加NLog.Web.AspNetCore包引用 方法1 在项目上右击“依赖项”---“管理Nuget程序包(N)…”,然后在浏览对话框中输入“NLog.Web.AspNetCore”查找包, ...
随机推荐
- 关于VUE的路由地址问题
目前我们VUE的项目都是单页面应用,路由地址全都是#以不同的锚点去分发,根目录就是 http://localhost:8080/index#/ (至于为什么不是http://localhost:8 ...
- Linux系统curl获取公网ip
收集了几个查询当前公网ip的网址,可以通过curl命令方便的查看 curl cip.cc curl ipinfo.io curl myip.ipip.net curl http://members.3 ...
- docker容器介绍
Docker容器 一.什么是Docker? Docker时Docker.Lnc公司开源的一个基于LXC技术之上搭建的Container容器引擎,源代码托管在Git ...
- SQL之常用函数
表8-2 中的SOUNDEX 需要做进一步的解释.SOUNDEX 是一个将任何文本串转换为描述其语音表示的字母数字模式的算法.SOUNDEX 考虑了类似的发音字符和音节,使得能对字符串进行发音比较而不 ...
- OC的消息机制简单介绍
在OC的消息机制中主要分为三个阶段,分别为: 1.消息发送阶段:从类以及父类的方法缓存列表和方法列表查找方法. 2.动态解析阶段:在消息发送阶段没有找到方法,则会进入这个阶段,负责动态添加方法实现. ...
- 2019-05-22 BTC走势分析
转载于:https://juejin.im/post/5ce4adf5f265da1b8c195ff8
- 27.rm命令
rm命令可以删除指定的文件或目录.也可以将某个目录及其下属的所有文件及其子目录均删除掉.对于链接文件,只是删除整个链接文件,而原有文件保持不变. 选项:-f:强制删除. -r:递归处理,将指定目录下的 ...
- 如何将Superset嵌入后台系统之实践
1. 前言 此次实践过程全属个人学习,我选择了在window下安装Superset,并进行嵌入后台系统实践.对此进行实践过程总结,实践成果分享给大家,供大家参考,如果你有更好的想法,欢迎留言交流. 2 ...
- Redis(一):数据结构与对象
前言 本书是Redis设计与实现的读书笔记,旨在对Redis底层的数据结构及实现有一定了解.本书所有的代码基于Redis 3.0. 简单动态字符串 SDS Redis没有直接使用C语言中的字符串,而是 ...
- JeeSite 4.0 简化业务逻辑层开发
2019独角兽企业重金招聘Python工程师标准>>> 引言 对于业务逻辑层的开发重复代码很多,尽管有代码生成器,但从代码量总的来说还是比较多,所以就有了以下抽象类及工具,对一些常用 ...