.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 和 ...
随机推荐
- BZOJ3594: [Scoi2014]方伯伯的玉米田【二维树状数组优化DP】
Description 方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美. 这排玉米一共有N株,它们的高度参差不齐. 方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感 ...
- 理解 C# 项目 csproj 文件格式的本质和编译流程
写了这么多个 C# 项目,是否对项目文件 csproj 有一些了解呢?Visual Studio 是怎么让 csproj 中的内容正确显示出来的呢?更深入的,我能够自己扩展 csproj 的功能吗? ...
- 【mongodb】Mongodb初识
MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系 ...
- vs2010 C++创建和使用动态链接库(dll)
一.用C++创建动态链接库项目: 1.打开Microsoft Visual Studio 2010,选择File->New->Project. 2.在NewProject中选择Inst ...
- altera官方推荐时钟使用方法
Register Combinational Logic Outputs If you use the output from combinational logic as a clock signa ...
- STMM32 ‘&’ 操作
if(0x04 == (new_cfg&0x04)){ sys_cfg_msg.pps_cfg = ; cn_save_data[cn_save_index_stp].hash= ; sys_ ...
- 自定义显示提示一段时间自动消失ShowMsgText控件
public partial class ShowMsgText : Label { public string TextMsg { get { return Text; } set { timer1 ...
- 如何在项目中使用requireJS
本文主要讲讲如何在一个项目中合理的使用requireJS,来加载js代码,这里是个实际例子,讲解不多, 看详情请连接到:http://www.cnblogs.com/evaling/p/6722760 ...
- sqlserver2008事务日志已满
--将数据库设为简单模式.日志文件自动断开. alter database CustomerInfoProject set recovery simple --查看日志文件状况 use Custom ...
- SharePoint2013切换帐户登录菜单显示
SharePoint2013帐户姓名显示的地方没有切换帐户的菜单,这个功能对于终端用户是可有可无的,但对于sharepoint管理员或sharepoint开发人员来讲,却是一个很重要的菜单,由于经常要 ...