.net core 2.0使用NLog写日志文件
原文地址:传送门
之前也看了 linezero 大佬写的教程,但是总是没有成功写入日志文件。按照 曲廉卿 的已成功,以下正文:
最近研究了一下NLog的使用方式,简单的入了一下门。
实现的功能,对于不同的日志,进行不同的记录,分别有系统运行日志,和个人在程序中写的异常日志。发布之后放在了IIS上。进行查看日志的信息
参考了两篇博客。
1.http://www.voidcn.com/blog/aojiancc2/article/p-6672009.html
2.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");里边穿的字符串参数的名称。

1 <?xml version="1.0" encoding="utf-8" ?>
2 <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 autoReload="true"
5 internalLogLevel="Warn"
6 internalLogFile="internal-nlog.txt">
7
8 <!--define various log targets-->
9 <targets>
10
11 <!--write logs to file-->
12 <target xsi:type="File" name="allfile" fileName="nlog-all-${shortdate}.log"
13 layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
14
15 <target xsi:type="File" name="ownFile-web" fileName="nlog-my-${shortdate}.log"
16 layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
17
18 <target xsi:type="Null" name="blackhole" />
19
20 </targets>
21
22 <rules>
23 <!--All logs, including from Microsoft-->
24 <logger name="*" minlevel="Trace" writeTo="allfile" />
25
26 <!--Skip Microsoft logs and so log only own logs-->
27 <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
28 <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
29 </rules>
30
31
32 </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

.net core 2.0使用NLog写日志文件的更多相关文章
- [转]ASP.NET Core 开发-Logging 使用NLog 写日志文件
本文转自:http://www.cnblogs.com/Leo_wl/p/5561812.html ASP.NET Core 开发-Logging 使用NLog 写日志文件. NLog 可以适用于 . ...
- ASP.NET Core 开发-Logging 使用NLog 写日志文件
ASP.NET Core 开发-Logging 使用NLog 写日志文件. NLog 可以适用于 .NET Core 和 ASP.NET Core . ASP.NET Core已经内置了日志支持,可以 ...
- 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 中,执行该操作的另一种方法 ...
- ASP.NET Core 2.0 使用NLog实现日志记录
1.安装NuGet包 1.Install-Package NLog.Web.AspNetCore 2.Install-Package NLog 在csproj中编辑: <PackageRefer ...
- ASP.NET Core 实战:使用 NLog 将日志信息记录到 MongoDB
一.前言 在项目开发中,日志系统是系统的一个重要组成模块,通过在程序中记录运行日志.错误日志,可以让我们对于系统的运行情况做到很好的掌控.同时,收集日志不仅仅可以用于诊断排查错误,由于日志同样也是大量 ...
- NET Core 实战:使用 NLog 将日志信息记录到 MongoDB
NET Core 实战:使用 NLog 将日志信息记录到 MongoDB https://www.cnblogs.com/danvic712/p/10226557.html ASP.NET Core ...
- 在.NET Core 3.0中发布单个Exe文件(PublishSingleFile)
原文:在.NET Core 3.0中发布单个Exe文件(PublishSingleFile) 假设我有一个简单的" Hello World"控制台应用程序,我想发送给朋友来运行.朋 ...
- .net Core 2.0使用NLog
最近研究了一下NLog的使用方式,简单的入了一下门. 实现的功能,对于不同的日志,进行不同的记录,分别有系统运行日志,和个人在程序中写的异常日志.发布之后放在了IIS上.进行查看日志的信息 参考了两篇 ...
- ASP.NET Core 1.0 中使用 Log 日志配置
https://github.com/aspnet/Logging https://docs.asp.net/en/latest/fundamentals/logging.html ASP.NET C ...
随机推荐
- NYOJ 745 dp
蚂蚁的难题(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 下雨了,下雨了,蚂蚁搬家了. 已知有n种食材需要搬走,这些食材从1到n依次排成了一个圈.小蚂蚁对每种 ...
- HDU1384 差分约束
Intervals Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- 通过eclipse mybatis generater代码生成插件自动生成代码
Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,由于手动书写很容易出错,我们可以利用Mybatis-Generator来帮我们自动生成文件.通过在Ecl ...
- 这个随笔用用来放一些好的思想和思考方式(暂时secret)
一: 给你一个只有4和7的数字,求这是第几个幸运数字? 思路: 我们把4映射成0,7映射成1,然后就如下枚举:0,1,00,01,10,11.因为是映射的,所以可以前导0,然后我们就会知道给出的那个数 ...
- vijos 1426 背包+hash
背景 北京奥运会开幕了,这是中国人的骄傲和自豪,中国健儿在运动场上已经创造了一个又一个辉煌,super pig也不例外……………… 描述 虽然兴奋剂是奥运会及其他重要比赛的禁药,是禁止服用的.但是运动 ...
- [洛谷P3444] [POI2006]ORK-Ploughing
洛谷题目链接[POI2006]ORK-Ploughing 题目描述 Byteasar, the farmer, wants to plough his rectangular field. He ca ...
- 持续集成之Jenkins安装部署
1.系统环境和安装java环境 [root@devops ~]# cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) 安装java ...
- centos6.8+openvpn实现账户密码连接(通过端口映射的方式)
#搭建openvpn(编译安装) 初始化环境 #update epel mirror yum install wget -y cd /etc/yum.repos.d && rm -rf ...
- elasticsearch中Node的创建
要连接到集群,首先要告诉集群:你是谁,你有什么特征.在es中体现为实例化节点,elasticsearch通过org.elasticsearch.node.NodeBuilder的build()或者no ...
- 省队集训 Day6 序列
[题目大意] 给出$n$个数的序列$a_1, a_2, ..., a_n$,有$m$次操作,为下面三种: $A~l~r~d$:区间$[l,r]$,全部加$d$. $M~l~r~d$:区间$[l,r]$ ...