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

NLog是一个免费的日志记录框架,专门为.net平台下的框架提供日志功能,本文主要说明asp.net core下怎么使用NLog。

首先用Nuget安装NLog.Extensions.Logging和NLog.Web.AspNetCore两个类库。

修改project.json,在publishOptions中添加”nlog.config节点”

"publishOptions": {

"include": [

"wwwroot",

"**/*.cshtml",

"appsettings.json",

"web.config",

"nlog.config"

]

}

在StartUp.cs中添加

public void ConfigureServices(IServiceCollection services){// Add framework services.services.AddMvc();//为NLog.web注入HttpContextAccessorservices.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
……
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory){//添加NLog到.net core框架中loggerFactory.AddNLog();//添加NLog的中间件app.AddNLogWeb();//指定NLog的配置文件env.ConfigureNLog("nlog.config");
……
}

HomeController.cs中是自定义日志

static Logger Logger = LogManager.GetCurrentClassLogger();
public IActionResult Index()
{Logger.Info("普通信息日志");Logger.Debug("调试日志");Logger.Error("错误日志");Logger.Fatal("异常日志");Logger.Warn("警告日志");Logger.Trace("跟踪日志");Logger.Log(NLog.LogLevel.Warn, "Log日志");try{int i = 0;var a = 10 / i;}catch (Exception exc){//异常日志Logger.Fatal(exc, exc.Message);}return View();
}

NLog.config,有两种日志,记录在C:\temp下,一种是全部日志,一种是自己通过NLog函数记录的日志。如果日志库异常,会产生在c:\temp\internal-nlog.txt下,

<?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="Warn"internalLogFile="c:\temp\internal-nlog.txt"><!--  ASP.NET Core 使用 --><extensions><add assembly="NLog.Web.AspNetCore"/></extensions> <targets><!-- 全部日志文件 --><target xsi:type="File" name="allfile" fileName="c:\temp\nlog-all-${shortdate}.log"layout="${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|${message} ${exception}" /><!-- 自定义记录的日志文件 --><target xsi:type="File" name="ownFile-web" fileName="c:\temp\nlog-own-${shortdate}.log"layout="${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|  ${message} ${exception}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" /><target xsi:type="Null" name="blackhole" /></targets><rules><!--所括asp.net core下的全部日志--><logger name="*" minlevel="Trace" writeTo="allfile" /><!--仅自定义记录的日志文件--><logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" /><logger name="*" minlevel="Trace" writeTo="ownFile-web" /></rules>
</nlog>

Layout中$后的数据就是要写日志的内容,关于这些数据可参考https://github.com/nlog/nlog/wiki/Layout-Renderers,可以根据自己的需要,选择要保存的日志数据,如下图是web中的日志数据:

如果想把日志保存到数据库中,可以把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"internalLogLevel="Warn"internalLogFile="c:\temp\internal-nlog.txt"><!-- ASP.NET Core 使用  --><extensions><add assembly="NLog.Web.AspNetCore"/></extensions><!-- 注意配置连接字符串 --><targets><target name="database" xsi:type="Database" connectionString="server=.;database=nglogdb;uid=SQL用户名;pwd=SQL密码;"><commandText>INSERT INTO [dbo].[NLog] ([MachineName],[SiteName],[Logged],[Level],[UserName],[Message],[Logger],[Properties],[Host],[Controller],[Action],[Url],[CallSite],[Exception]) VALUES (@machineName,@siteName,@logged,@level,@userName,@message,@logger,@properties,@host,@controller,@action,@url,@callSite,@exception);</commandText><parameter name="@machineName"    layout="${machinename}" /><parameter name="@siteName"       layout="${iis-site-name}" /><parameter name="@logged"         layout="${date}" /><parameter name="@level"          layout="${level}" /><parameter name="@username"       layout="${aspnet-user-identity}" /><parameter name="@message"        layout="${message}" /><parameter name="@logger"         layout="${logger}" /><parameter name="@properties"     layout="${all-event-properties:separator=|}" /><parameter name="@host"           layout="${aspnet-request-host}" /><parameter name="@controller"     layout="${aspnet-MVC-Controller}" /><parameter name="@action"         layout="${aspnet-MVC-Action}" /><parameter name="@url"            layout="${aspnet-request-url}" /><parameter name="@callSite"       layout="${callsite}" /><parameter name="@exception"      layout="${exception:tostring}" /></target></targets><rules><logger name="*" minlevel="Trace" writeTo="database"/></rules>
</nlog>

数据库数据如下:

转载于:https://blog.51cto.com/axzxs/1894584

NLog在asp.net core中的应用相关推荐

  1. Elasticsearch,Kibana,Logstash,NLog实现ASP.NET Core 分布式日志系统

    Elasticsearch,Kibana,Logstash,NLog实现ASP.NET Core 分布式日志系统 原文:Elasticsearch,Kibana,Logstash,NLog实现ASP. ...

  2. invoke方法是做啥的_使用 NLog 给 Asp.Net Core 做请求监控

    为了减少由于单个请求挂掉而拖垮整站的情况发生,给所有请求做统计是一个不错的解决方法,通过观察哪些请求的耗时比较长,我们就可以找到对应的接口.代码.数据表,做有针对性的优化可以提高效率.在 asp.ne ...

  3. ASP.NET Core 中的依赖注入

    什么是依赖注入 软件设计原则中有一个依赖倒置原则(DIP),为了更好的解耦,讲究要依赖于抽象,不要依赖于具体.而控制反转(Ioc)就是这样的原则的其中一个实现思路, 这个思路的其中一种实现方式就是依赖 ...

  4. Asp.Net Core中利用Seq组件展示结构化日志功能

    在一次.Net Core小项目的开发中,掌握的不够深入,对日志记录并没有好好利用,以至于一出现异常问题,都得跑动服务器上查看,那时一度怀疑自己肯定没学好,不然这一块日志不可能需要自己扒服务器日志来查看 ...

  5. 将NLog与ASP.NET Core Web应用程序集成

    目录 介绍 集成步骤 添加NLog NuGet软件包 添加NLog配置 添加NLog提供程序 测试NLog提供程序 总结 下载源代码1.5 MB 介绍 在实际的应用程序中,正确的错误日志记录机制对于跟 ...

  6. 如何使用C#在ASP.NET Core中轻松实现QRCoder

    by Yogi 由瑜伽士 如何使用C#在ASP.NET Core中轻松实现QRCoder (How to easily implement QRCoder in ASP.NET Core using ...

  7. asp.net core中IHttpContextAccessor和HttpContextAccessor的妙用

    分享一篇文章,关于asp.net core中httpcontext的拓展. 现在,试图围绕HttpContext.Current构建你的代码真的不是一个好主意,但是我想如果你正在迁移一个企业类型的应用 ...

  8. 在asp.net core中使用托管服务实现后台任务

    在业务场景中经常需要后台服务不停的或定时处理一些任务,这些任务是不需要及时响应请求的. 在 asp.net中会使用windows服务来处理. 在 asp.net core中,可以使用托管服务来实现,托 ...

  9. ASP.NET Core中显示自定义错误页面-增强版

    之前的博文 ASP.NET Core中显示自定义错误页面 中的方法是在项目中硬编码实现的,当有多个项目时,就会造成不同项目之间的重复代码,不可取. 在这篇博文中改用middleware实现,并且放在独 ...

最新文章

  1. [转] Spring Boot特性
  2. EasyRE 寒假逆向生涯(5/100)
  3. Mastering Caching in Asp.net
  4. Spring学习总结二
  5. c语言主范式与编码,超详细!终于搞明白KMP算法
  6. 猿题库 iOS 客户端架构设计-唐巧
  7. [渝粤教育] 厦门理工学院 机械设计 参考 资料
  8. vsftp服务器搭建
  9. python增量更新数据_Python标准库——加密
  10. 开启你的开源项目生涯_了解如何在5分钟内以开源方式开始您的职业生涯
  11. jsp中 自定义 tag的几种方式
  12. 2019 蓝桥杯省赛 B 组模拟赛(一) 程序设计:后缀字符串 ( STL map 和 substr()函数的应用)
  13. c语言for嵌套循环语句,关于for嵌套循环语句的疑问
  14. 机器学习——seaborn可视化
  15. LINQ系列:Linq to Object集合操作符
  16. JAVA四行代码制作简单的翻译软件(傻瓜式教程)
  17. 原生javascript分页 html分页与ajax数据请求结合使用 前端js分页
  18. navicat编程界面_主界面初识 Navicat Premium使用技巧(一)
  19. 追寻本质还是流于形式
  20. outlook企业邮箱服务器怎么填,Outlook客户端怎么配置企业邮箱

热门文章

  1. java对日期进行加减操作以及比较大小
  2. exadata磁盘组无法mount恢复---惜分飞
  3. bzoj 3489 A simple rmq problem——主席树套线段树
  4. jQuery常见的选择器操作运算符
  5. linux系统用户组管理
  6. 回溯法求解N皇后问题(Java实现)
  7. 算法6-1:哈希函数
  8. 4.6 Routing -- Rendering A Tempalte
  9. Javascript简介
  10. 大数据架构:flume-ng+Kafka+Storm+HDFS 实时系统组合