最近研究了一下NLog的使用方式,简单的入了一下门。

实现的功能,对于不同的日志,进行不同的记录,分别有系统运行日志,和个人在程序中写的异常日志。发布之后放在了IIS上。进行查看日志的信息

参考了两篇博客。

1.http://www.voidcn.com/blog/aojiancc2/article/p-6672009.html2.http://www.cnblogs.com/linezero/p/Logging.html

个人觉得还是第一篇写的详细。第二篇可能是大神写的吧,一些细节并没哟特别的注意到。

那两篇博客已经写很详细了,我再重复一下,以及提醒一下像我一样的小菜们,需要注意的事项,以及个人在其中的一些疑惑。

首先我们建一个Core 2.0的项目,需要使用Visual Studio 2017  15.3,我们需要引入这些包,我们会用到。这是我的*.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>

添加下边的代码

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>

在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

原文地址:http://www.cnblogs.com/qulianqing/p/7222177.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

.NET Core 2.0使用NLog相关推荐

  1. ASP.NET Core 2.0 配置NLog日志组件

    2019独角兽企业重金招聘Python工程师标准>>> 1).添加nlog.config配置文件 <?xml version="1.0" encoding= ...

  2. 把旧系统迁移到.Net Core 2.0 日记(2) - 依赖注入/日志NLog

    Net Core 大量使用依赖注入(Dependency Inject), 打个比方,我们常用的日志组件有Log4Net,NLog等等. 如果我们要随时替换日志组件,那么代码中就不能直接引用某个组件的 ...

  3. ASP.Net Core 2.0中的Razor Page不是WebForm

    随着.net core2.0的发布,我们可以创建2.0的web应用了.2.0中新东西的出现,会让我们忘记老的东西,他就是Razor Page.下面的这篇博客将会介绍ASP.Net Core 2.0中的 ...

  4. ASP.NET Core 2.0 自定义 _ViewStart 和 _ViewImports 的目录位置

    在 ASP.NET Core 里扩展 Razor 查找视图目录不是什么新鲜和困难的事情,但 _ViewStart 和 _ViewImports 这2个视图比较特殊,如果想让 Razor 在我们指定的目 ...

  5. Razor Page–Asp.Net Core 2.0新功能 Razor Page介绍

    Razor Page介绍 前言 上周期待已久的Asp.Net Core 2.0提前发布了,一下子Net圈热闹了起来,2.0带来了很多新的特性和新的功能,其中Razor Page引起我的关注,作为web ...

  6. MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移(Migration)介绍及示例

    dotnet core 2.0 发布已经好几天了,期间也把原来 dotnet core 1.1 的 MVC 项目升级到了 2.0,升级过程还是比较顺利的,变动也不是太多.升级的过程中也少不了 Enti ...

  7. Entity Framework Core 2.0 特性介绍和使用指南

    前言 这是.Net Core 2.0生态生态介绍的最后一篇,EF一直是我喜欢的一个ORM框架,随着版本升级EF也发展到EF6.x,Entity Framework Core是一个支持跨平台的全新版本, ...

  8. ASP.NET Core 2.0 特性介绍和使用指南

    ASP.NET Core 2.0 发布日期:2017年8月14日 ASP.NET团队宣布ASP.NET Core 2.0正式发布,发布Visual Studio 2017 15.3支持ASP.NET ...

  9. .net core 2.0学习笔记(一):开发运行环境搭建

    期待已久的.net core 2.0终于发布了!大家等的花儿都谢了. 不过比预期提前了一个多月,这在微软历史上还真的不多见.按照历史经验看,2.0版本应该比较靠谱,我猜这也是社区非常火爆的原因吧.下面 ...

最新文章

  1. 判断元素是否在ndarray_暨南大学药学院考研~手性的判断与相关介绍
  2. c语言uint赋值给int,如何在C#中将uint转换为int?
  3. 相对熵与交叉熵的区别
  4. 防火墙(3)——iptables(1)
  5. php 打印错误 display,php错误display及error_reporting的使用
  6. 怎么样开会才有效果?
  7. springMVC使用注解方式进行页面跳转
  8. Leetcode 950. Reveal Cards In Increasing Order
  9. mvn install java版本,maven的打包命令--assemblyinstall和maven update之后jdk版本变回1.5的问题...
  10. Extra Data after Last Expected Column:hawq建外表load数据报错
  11. sublime text3 3176激活
  12. Struts2中Action的搜素顺序
  13. 用友 NC客户化开发手册
  14. Unity 粒子特效
  15. 双拼输入法学习-搜狗方案-3
  16. r语言 col_co,cob,col,con,cor,cog前缀其实都是com变化而已
  17. WebSphere如何重启服务
  18. (五)作业Job和实例Instance | 普罗米修斯(Prometheus)
  19. python高德地图api调用实例_Python玩转高德地图API(二)
  20. 大一新生计算机掌握情况word,2021年大一计算机学习心得word版

热门文章

  1. 阿里云ECS,搭建MySQL5.7数据库环境
  2. 纯IPv6环境App适配的坑
  3. 手机自动化测试:appium源码分析之bootstrap七
  4. AVL树----java
  5. asp.net 动态添加JavaScript方法
  6. Xamarin.Forms 5.0 项目实战发布!
  7. ASP.NET Core 6.0对热重载的支持
  8. 多语言应用开发中本地化信息对照表
  9. .NET 5 程序高级调试-WinDbg
  10. 快来参加学习.NET 挑战赛