NLog在asp.net core中的应用
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中的应用相关推荐
- Elasticsearch,Kibana,Logstash,NLog实现ASP.NET Core 分布式日志系统
Elasticsearch,Kibana,Logstash,NLog实现ASP.NET Core 分布式日志系统 原文:Elasticsearch,Kibana,Logstash,NLog实现ASP. ...
- invoke方法是做啥的_使用 NLog 给 Asp.Net Core 做请求监控
为了减少由于单个请求挂掉而拖垮整站的情况发生,给所有请求做统计是一个不错的解决方法,通过观察哪些请求的耗时比较长,我们就可以找到对应的接口.代码.数据表,做有针对性的优化可以提高效率.在 asp.ne ...
- ASP.NET Core 中的依赖注入
什么是依赖注入 软件设计原则中有一个依赖倒置原则(DIP),为了更好的解耦,讲究要依赖于抽象,不要依赖于具体.而控制反转(Ioc)就是这样的原则的其中一个实现思路, 这个思路的其中一种实现方式就是依赖 ...
- Asp.Net Core中利用Seq组件展示结构化日志功能
在一次.Net Core小项目的开发中,掌握的不够深入,对日志记录并没有好好利用,以至于一出现异常问题,都得跑动服务器上查看,那时一度怀疑自己肯定没学好,不然这一块日志不可能需要自己扒服务器日志来查看 ...
- 将NLog与ASP.NET Core Web应用程序集成
目录 介绍 集成步骤 添加NLog NuGet软件包 添加NLog配置 添加NLog提供程序 测试NLog提供程序 总结 下载源代码1.5 MB 介绍 在实际的应用程序中,正确的错误日志记录机制对于跟 ...
- 如何使用C#在ASP.NET Core中轻松实现QRCoder
by Yogi 由瑜伽士 如何使用C#在ASP.NET Core中轻松实现QRCoder (How to easily implement QRCoder in ASP.NET Core using ...
- asp.net core中IHttpContextAccessor和HttpContextAccessor的妙用
分享一篇文章,关于asp.net core中httpcontext的拓展. 现在,试图围绕HttpContext.Current构建你的代码真的不是一个好主意,但是我想如果你正在迁移一个企业类型的应用 ...
- 在asp.net core中使用托管服务实现后台任务
在业务场景中经常需要后台服务不停的或定时处理一些任务,这些任务是不需要及时响应请求的. 在 asp.net中会使用windows服务来处理. 在 asp.net core中,可以使用托管服务来实现,托 ...
- ASP.NET Core中显示自定义错误页面-增强版
之前的博文 ASP.NET Core中显示自定义错误页面 中的方法是在项目中硬编码实现的,当有多个项目时,就会造成不同项目之间的重复代码,不可取. 在这篇博文中改用middleware实现,并且放在独 ...
最新文章
- [转] Spring Boot特性
- EasyRE 寒假逆向生涯(5/100)
- Mastering Caching in Asp.net
- Spring学习总结二
- c语言主范式与编码,超详细!终于搞明白KMP算法
- 猿题库 iOS 客户端架构设计-唐巧
- [渝粤教育] 厦门理工学院 机械设计 参考 资料
- vsftp服务器搭建
- python增量更新数据_Python标准库——加密
- 开启你的开源项目生涯_了解如何在5分钟内以开源方式开始您的职业生涯
- jsp中 自定义 tag的几种方式
- 2019 蓝桥杯省赛 B 组模拟赛(一) 程序设计:后缀字符串 ( STL map 和 substr()函数的应用)
- c语言for嵌套循环语句,关于for嵌套循环语句的疑问
- 机器学习——seaborn可视化
- LINQ系列:Linq to Object集合操作符
- JAVA四行代码制作简单的翻译软件(傻瓜式教程)
- 原生javascript分页 html分页与ajax数据请求结合使用 前端js分页
- navicat编程界面_主界面初识 Navicat Premium使用技巧(一)
- 追寻本质还是流于形式
- outlook企业邮箱服务器怎么填,Outlook客户端怎么配置企业邮箱