.net Core 2.0使用NLog
最近研究了一下NLog的使用方式,简单的入了一下门。
实现的功能,对于不同的日志,进行不同的记录,分别有系统运行日志,和个人在程序中写的异常日志。发布之后放在了IIS上。进行查看日志的信息
参考了两篇博客。
.http://www.voidcn.com/blog/aojiancc2/article/p-6672009.html
.http://www.cnblogs.com/linezero/p/Logging.html
个人觉得还是第一篇写的详细。第二篇可能是大神写的吧,一些细节并没哟特别的注意到。
那两篇博客已经写很详细了,我再重复一下,以及提醒一下像我一样的小菜们,需要注意的事项,以及个人在其中的一些疑惑。
首先我们建一个Core 2.0的项目,由于目前2.0 没有正式发布,如果想用2.0 需要装preview版的vs
我们需要引入这些包,我们会用到。这是我的*.csproj文件的部分。(在这里需要注意下,如果是Core2.0的项目直接用2.0以上包,不然在vs中运行是没有问题的,在windows环境中运行也是没有问题的,但是到了Linux中就会出问题,在 restore 时,会给你报错,让你把包升级到2.0以上。这个问题自己原来也没有注意到,本来想着这些版本控制之类的东西,肯定是向下兼容的。可是前两天,在Linux上用docker 进行测试发布的时候就出现了这个问题。)
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0-preview1-final" />
<PackageReference Include="NLog" Version="5.0.0-beta09" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.4.1" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="4.3.0" />
</ItemGroup>
打开我们的startUp.cs 文件
添加下边的代码
public void Configure(IApplicationBuilder app, IHostingEnvironment env ,ILoggerFactory loggerFactory)
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);//这是为了防止中文乱码
loggerFactory.AddNLog();//添加NLog
env.ConfigureNLog("nlog.config");//读取Nlog配置文件
//other Code
}
在ConfigServie方法中不需要进行依赖注入的配置
由于这里我们添加了读取Nlog的配置文件的信息
所以我们要添加“nlog.config的文件”
新建一个 xml文件 名称为 你的 env.ConfigureNLog("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="internal-nlog.txt"> <!--define various log targets-->
<targets> <!--write logs to file-->
<target xsi:type="File" name="allfile" fileName="nlog-all-${shortdate}.log"
layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" /> <target xsi:type="File" name="ownFile-web" fileName="nlog-my-${shortdate}.log"
layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" /> <target xsi:type="Null" name="blackhole" /> </targets> <rules>
<!--All logs, including from Microsoft-->
<logger name="*" minlevel="Trace" writeTo="allfile" /> <!--Skip Microsoft logs and so log only own logs-->
<logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
<logger name="*" minlevel="Trace" writeTo="ownFile-web" />
</rules> </nlog>
nlog.config
在HomeControler中进行如下修改(我结合了他们两个人的用法)
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
static Logger Logger = LogManager.GetCurrentClassLogger();
public HomeController(ILogger<HomeController> logger)
{
this._logger = logger;
}
public IActionResult Index()
{
Logger.Info("普通信息日志-----------");
Logger.Debug("调试日志-----------");
Logger.Error("错误日志-----------");
Logger.Fatal("异常日志-----------");
Logger.Warn("警告日志-----------");
Logger.Trace("跟踪日志-----------");
Logger.Log(NLog.LogLevel.Warn, "Log日志------------------"); _logger.LogInformation("你访问了首页");
_logger.LogWarning("警告信息");
_logger.LogError("错误信息");
// _logger.LogDebug(NLog.LogLevel.Fatal, "NLog 致命日志");
return View();
}
}
可能有人会疑问:构造函数中的logger是怎么穿进去的,没有进行依赖注入。我个人了解的也不是特别的深入,目测是通过app.addNlog()。进行注入的。
之后我们修改一下我们的appsetting.json文件,把其中的日志级别调整为Information的。默认是Debug的
{
"Logging": {
"IncludeScopes": false,
"Debug": {
"LogLevel": {
"Default": "Information"
}
},
"Console": {
"LogLevel": {
"Default": "Information"
}
}
}
}
这时候我们直接运行F5在/bin/Debug/netcoreapp2.0文件夹下是看不到日志文件的,在我们的项目的根目录下打开dos窗口。dotnet restore 一下,然后dotnet run 一下访问一下那个地址,之后再进入那个文件夹就可以看到日志文件了。

对这两个文件进行说明一下,第一个是网站运行时所有的日志记录,第二个只是有我们自己写的异常日志记录。
由于我要放在iis上,所以我要发布一下,在VS中直接发布也行,用 dotnet publish 进行发布也可以我用的是第一种,发布完成之后。这个时候我们如果直接运行的话,是没有办法运行原因是发布的时候。没有将我们写的nlog.config 文件放在发布的目录中去,我们需要手动的将这个文件复制到我们的发布的目录中。(另一中解决方法是:右击文件->属性->复制到输出目录)
之后设置一下发布的这个文件夹的权限,把Everyone这个角色添加进去,并给它读写的权限。
之后在iis上绑定这个发布的目录,在应用程序池中把刚才绑定到iis上的网站,改为无托管模式。之后将网站重新启动一下,在浏览器中运行输入你绑定的域名。可以直接访问这个网址了。
如果出现一下错误。请先进入发布程序的那个文件夹,执行一下dotnet run 如果项目可以成功运行,请检查一下everyone是否有读写的权限,重启一下iis服务器。如果都不行,请重新publish。就可以解决这个问题。

这是我运行之后的生成的日志文件目录是publishoutput

.net Core 2.0使用NLog的更多相关文章
- EF Core使用SQL调用返回其他类型的查询 ASP.NET Core 2.0 使用NLog实现日志记录 CSS 3D transforms cSharp:use Activator.CreateInstance with an Interface? SqlHelper DBHelper C# Thread.Abort方法真的让线程停止了吗? 注意!你的Thread.Abort方法真
EF Core使用SQL调用返回其他类型的查询 假设你想要 SQL 本身编写,而不使用 LINQ. 需要运行 SQL 查询中返回实体对象之外的内容. 在 EF Core 中,执行该操作的另一种方法 ...
- .net core 2.0使用NLog写日志文件
原文地址:传送门 之前也看了 linezero 大佬写的教程,但是总是没有成功写入日志文件.按照 曲廉卿 的已成功,以下正文: 最近研究了一下NLog的使用方式,简单的入了一下门. 实现的功能,对于不 ...
- Core 2.0使用Nlog记录日志+Mysql
一.先创建一个Core2.0的项目,并在NuGet中引入3个类库文件 MySql.Data.dll NLog.dll NLog.Web.AspNetCore.dll 二.创建一个nlog.config ...
- ASP.NET Core 2.0 使用NLog实现日志记录
1.安装NuGet包 1.Install-Package NLog.Web.AspNetCore 2.Install-Package NLog 在csproj中编辑: <PackageRefer ...
- Asp.Net Core 2.0 项目实战(9) 日志记录,基于Nlog或Microsoft.Extensions.Logging的实现及调用实例
本文目录 1. Net下日志记录 2. NLog的使用 2.1 添加nuget引用NLog.Web.AspNetCore 2.2 配置文件设置 2.3 依赖配置及调用 ...
- .net core 2.0+superui +Dapper.SimpleCRUD+mysql+NLog
**_ .net core 2.0+superui +Dapper.SimpleCRUD+mysql+NLog _** 前端框架 superui http://www.supermgr.cn/ 1.组 ...
- ASP.NET Core 2.0系列学习笔记-NLog日志配置文件
一.新建ASP.NET Core 2.0 MVC项目,使用NuGet在浏览中搜索:NLog.Web.AspNetCore,如下图所示: 二.在项目的根目录下新建一个xml类型的nlog.config文 ...
- [转]ASP.NET Core 开发-Logging 使用NLog 写日志文件
本文转自:http://www.cnblogs.com/Leo_wl/p/5561812.html ASP.NET Core 开发-Logging 使用NLog 写日志文件. NLog 可以适用于 . ...
- Core 开发-Logging 使用NLog
ASP.NET Core 开发-Logging 使用NLog 写日志文件 ASP.NET Core 开发-Logging 使用NLog 写日志文件. NLog 可以适用于 .NET Core 和 ...
随机推荐
- Hadoop 2.2 & HBase 0.96 Maven 依赖总结
由于Hbase 0.94对Hadoop 2.x的支持不是非常好,故直接添加Hbase 0.94的jar依赖可能会导致问题. 但是直接添加Hbase0.96的依赖,由于官方并没有发布Hbase 0.96 ...
- python 之 list,tuple,dict,set
基本类型, 其中set好像提到的很少 list : [] 根据字面, 是一个列表, 所以有序, 可以通过序号方位 tuple: () 是不变的list, 通过序号访问 dict: {}, 字 ...
- Oracle SQL七次提速技巧
以下SQL执行时间按序号递减. 1,动态SQL,没有绑定变量,每次执行都做硬解析操作,占用较大的共享池空间,若共享池空间不足,会导致其他SQL语句的解析信息被挤出共享池. create or repl ...
- db_recovery_file_dest_size 修改大一点及删除归档日志 |转|
今天给客户测 试问题,让客户把数据发过来了.解压缩后一看,他们还是用的oracle 815版本的(他们exp导出时,带了导出日志,从导出日志中看出来是oracle 815版本的),不过没有关系,低版本 ...
- filter异常捕捉
jsp中抛出一个异常 <% String action = request.getParameter("action"); if ("accountExceptio ...
- 15.Python实现识别登录验证码(入门)
1.若想识别登录验证码,需要安装:Tesseract-OCR,其下载地址为:http://jaist.dl.sourceforge.net/project/tesseract-ocr-alt/tess ...
- volatile浅析
volatile的意思是不稳定的.易变的,但在多线程中却跟字面意思一毛钱关系没有.作为一个变量修饰符,它主要有两个作用:一个是告诉大家,该变量是一个在多个线程之间均可见的变量:另一个是告诉java虚拟 ...
- RK3288 usb 摄像头旋转
系统:Android 5.1 下面实现了摄像头 180 度旋转,旋转角度只需修改 orientation. diff --git a/hardware/rockchip/camera/CameraHa ...
- 引用 LPSTR、LPCSTR、LPTSTR、LPCTSTR、LPWSTR及LPCWSTR的意义及区别
1.ANSI(即MBCS):为多字节字符集,它是不定长表示世界文字的编码方式.ANSI表示英文字母时就和ASCII一样,但表示其他文字时就需要用多字节. 2.Unicode:用两个字节表示一个字符 ...
- 30个让人兴奋的视差滚动(Parallax Scrolling)效果网站--转
视差滚动(Parallax Scrolling)是指让多层背景以不同的速度移动,形成立体的运动效果,带来非常出色的视觉体验.作为今年网页设计的热点趋势,越来越多的网站应用了这项技术.今天这篇文章就与大 ...