1、安装NLog

"NLog.Extensions.Logging": "1.0.0-rtm-alpha4"

2、配置NLog

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
//配置NLog
loggerFactory.AddNLog();
env.ConfigureNLog("nlog.config"
); app.UseApplicationInsightsRequestTelemetry();

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="Debug"
internalLogToTrace="true"> <targets>
<target name="logfile"
xsi:type="File"
fileName="logs/${shortdate}.log"
layout="${longdate} [${level:uppercase=true}] ${callsite:className=true:methodName=true:skipFrames=1} ${message} ${exception} @${callsite:fileName=true:includeSourcePath=true}" />
<target name="console"
xsi:type="ColoredConsole"
layout="${longdate} [${level:uppercase=true}] ${callsite:className=true:methodName=true:skipFrames=1} ${message} ${exception} @${callsite:fileName=true:includeSourcePath=true}"/>
<target xsi:type="Null" name="blackhole" />
</targets> <rules>
<!-- 除非调试需要,把 .NET Core 程序集的 Debug 输出都屏蔽 Trace -》Debug-》 Information -》Warning-》 Error-》 Critical-->
<logger name="Microsoft.*" minLevel="Trace" writeTo="blackhole" final="true" />
<!-- 除非调试需要,把系统的 Debug 输出都屏蔽 -->
<logger name="System.*" minLevel="Trace" writeTo="blackhole" final="true" /> <logger name="*" minlevel="Debug" writeTo="logfile,console" />
</rules>
</nlog>

NLog的异常等级:Trace -》Debug-》 Information -》Warning-》 Error-》 Critical

注意配置文件中可以移除Microsoft和System开头的组件输出的日志,不然日志会非常多

NLog的更多配置请参考:https://github.com/NLog/NLog/wiki/Callsite-layout-renderer

4、封装成公共方法

using NLog;
using System;
using System.Diagnostics; namespace UFX.Tools
{
public class LogHelper
{
private static readonly Logger log = LogManager.GetLogger("");
public static void Error(object msg, Exception exp = null)
{
if (exp == null)
log.Error("#" + msg);
else
log.Error("#" + msg + " " + exp.ToString());
} public static void Debug(object msg, Exception exp = null)
{
if (exp == null)
log.Debug("#" + msg);
else
log.Debug("#" + msg + " " + exp.ToString());
} public static void Info(object msg, Exception exp = null)
{
if (exp == null)
log.Info("#" + msg);
else
log.Info("#" + msg + " " + exp.ToString());
} public static void Warn(object msg, Exception exp = null)
{
if (exp == null)
log.Warn("#" + msg);
else
log.Warn("#" + msg + " " + exp.ToString());
}
}
}

5、其他方法中使用直接LogHelper.Debug("")等即可

但你会发现日志输出的方法中,所有异常都来自Tools.LogHelper,这样就不能准确的返回异常的方法,代码位置了,在.Net Core之前的版本中,我们可以通过StackFrames来找到调用方法,但是.Net Core这个方法不管用了。

好在NLog已经为我们考虑到这个问题了,配置文件中直接可以定义需要打印的方法名称,需要网上寻找的Frame个数

${callsite:className=true:methodName=true:skipFrames=1}

更多配置请参考:https://github.com/NLog/NLog/wiki/Callsite-layout-renderer

using NLog;using System;using System.Diagnostics;
namespace UFX.Tools{    public class LogHelper    {        private static readonly Logger log = LogManager.GetLogger("");        public static void Error(object msg, Exception exp = null)        {            if (exp == null)                log.Error("#" + msg);            else                log.Error("#" + msg + "  " + exp.ToString());        }
        public static void Debug(object msg, Exception exp = null)        {            if (exp == null)                log.Debug("#" + msg);            else                log.Debug("#" + msg + "  " + exp.ToString());        }
        public static void Info(object msg, Exception exp = null)        {            if (exp == null)                log.Info("#" + msg);            else                log.Info("#" + msg + "  " + exp.ToString());        }

public static void Warn(object msg, Exception exp = null)        {            if (exp == null)                log.Warn("#" + msg);            else                log.Warn("#" + msg + "  " + exp.ToString());        }    }}

Asp.net Core中使用NLog,并封装成公共的日志方法的更多相关文章

  1. ASP.NET Core:ASP.NET Core中使用NLog记录日志

    一.前言 在所有的应用程序中,日志功能是不可或缺的模块,我们可以根据日志信息进行调试.查看产生的错误信息,在ASP.NET Core中我们可以使用log4net或者NLog日志组件来实现记录日志的功能 ...

  2. 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日志写入数据 ...

  3. 在asp.net core中使用NLog

    第一步:nuget  引入  NLog.Web.AspNetCore 4.5+ 第二步:放入nlog.config <?xml version="1.0" encoding= ...

  4. 如何在ASP.NET Core 中使用IHttpClientFactory

    利用IHttpClientFactory可以无缝创建HttpClient实例,避免手动管理它们的生命周期. 当使用ASP.Net Core开发应用程序时,可能经常需要通过HttpClient调用Web ...

  5. NLog在asp.net core中的应用

    Asp.net core中,自带的Log是在当selfhost运行时,在控制台中输出,不便于查阅,如果用一个log架框,把日志持久化,便于查询. NLog是一个免费的日志记录框架,专门为.net平台下 ...

  6. ASP.NET Core 中的日志记录

    目录 内置日志的使用 使用Nlog 集成ELK 参考 内置日志的使用 Logger 是 asp .net core 的内置 service,所以我们就不需要在ConfigureService里面注册了 ...

  7. ASP.NET Core中的依赖注入(4): 构造函数的选择与服务生命周期管理

    ServiceProvider最终提供的服务实例都是根据对应的ServiceDescriptor创建的,对于一个具体的ServiceDescriptor对象来说,如果它的ImplementationI ...

  8. ASP.NET Core 中文文档 第三章 原理(1)应用程序启动

    原文:Application Startup 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:谢炀(kiler398).许登洋(Seay) ASP.NET Core 为你的应用程 ...

  9. ASP.NET Core中使用Razor视图引擎渲染视图为字符串

    一.前言 在有些项目需求上或许需要根据模板生产静态页面,那么你一样可以用Razor语法去直接解析你的页面从而把解析的页面生成静态页,这样的使用场景很多,不限于生成静态页面,视图引擎为我们提供了模型到视 ...

随机推荐

  1. vb6 实现奇门遁甲起局排盘、格局分析概要

    为了感谢博客园提供场地写博客,我将在周末有空时候,围绕奇门遁甲,涉及到奇门遁甲学习过程的方方面面的问题,写一些文章展开叙述!

  2. java基础学习总结——this关键字

    一.this关键字

  3. Yaf零基础学习总结3-Hello Yaf

    Yaf零基础学习总结3-Hello Yaf 上一次我们已经学习了如何安装yaf了,准备工作做好了之后我们来开始实际的编码了,码农都知道一个经典的语句就是“Hello World”了,今天我们开始入手Y ...

  4. 《理解 ES6》阅读整理:块绑定(Block Binding)

    变量声明一直是JavaScript中一个需要技巧的部分.在大多数基于C的编程语言中,变量(更正式地说是绑定)在声明的时候创建,然而在JavaScript中并不是这样.在JavaScript中,变量在何 ...

  5. 数据库知识整理<六>

    聚合函数与分组 6.1使用聚合函数进行数据统计: 聚合函数常见的有以下几种: count:返回该结果集中行的数目. sum:返回结果集中所有值的总和. avg:返回结果集中所有值的平均值. max:返 ...

  6. jsp连接sqlServer数据库教程

    一.首先讲下我用的工具版本以供参考: jar包:jtds1.3.1.jar  下载地址:点击进入 数据库:SQL Server2012 服务器:Tomcat8.0   下载地址:点击进入 开发IDE工 ...

  7. C++11 并发指南六(atomic 类型详解四 C 风格原子操作介绍)

    前面三篇文章<C++11 并发指南六(atomic 类型详解一 atomic_flag 介绍)>.<C++11 并发指南六( <atomic> 类型详解二 std::at ...

  8. C语言中的内存分配与释放

    C语言中的内存分配与释放 对C语言一直都是抱着学习的态度,很多都不懂,今天突然被问道C语言的内存分配问题,说了一些自己知道的,但感觉回答的并不完善,所以才有这篇笔记,总结一下C语言中内存分配的主要内容 ...

  9. [JS12] 统计访问次数

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  10. hibernate 问题集

    1.Could not obtain transaction-synchronized Session for current thread 解决方法: 在web.xml中加入如下配置: <fi ...