一、使用VisualStudioCode创建一个webapi项目(也可以是mvc等)、一个类库(用于封装记录日志方法,当然如果使用依赖注入到控制台项目,就不需要此类库了)。

二、在类库中添加NLog、NLog.Web.AspNetCore引用(NLog.Web.AspNetCore 是为 ASP.NET Core 添加了对于 NLog 的平台支持),

       webapi项目添加对该类库的引用,这样控制台就无需添加nlog的引用了。

三、在类库中自定义类,简单封装记录日志方法,代码如下:

  1. using System;
  2. using Microsoft.Extensions.Logging;
  3. using NLog;
  4.  
  5. namespace common
  6. {
  7. public class NLogHelper
  8. {
  9. //每创建一个Logger都会有一定的性能损耗,所以定义静态变量
  10. private static Logger nLogger = LogManager.GetCurrentClassLogger();
  11.  
  12. public static void Info(string msg)
  13. {
  14. nLogger.Info(msg);
  15. }
  16.  
  17. public static void Error(string msg, Exception ex = null)
  18. {
  19. if (ex == null)
  20. nLogger.Error(msg);
  21. else
  22. nLogger.Error(ex,msg);
  23. }
  24. }
  25. }

四、webapi项目配置NLog

1、添加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. throwConfigExceptions="true"
  5. autoReload="true">
  6.  
  7. <!--加载ASP.NET Core插件-->
  8. <extensions>
  9. <add assembly="NLog.Web.AspNetCore"/>
  10. </extensions>
  11.  
  12. <!--输出目的地-->
  13. <targets>
  14.  
  15. <!--输出到文件,记录level为info的日志-->
  16. <target xsi:type="File"
  17. name="info-file"
  18. layout="${longdate}|${uppercase:${level}}|${event-properties:item=EventId.Id}${newline}位置:${callsite:className=True:methodName=True:fileName=True:includeSourcePath=True:skipFrames=1}${newline}${message}${newline}${exception}${newline}"
  19. fileName="c:\logfiles\api\info-${shortdate}.log"
  20. archiveFileName="c:\logfiles\info-${shortdate}.log"
  21. archiveAboveSize="10485760"
  22. archiveNumbering="Rolling"
  23. concurrentWrites="true"
  24. maxArchiveFiles="100000"
  25. keepFileOpen="false"
  26. />
  27.  
  28. <!--输出到文件,记录level为error的日志-->
  29. <target xsi:type="File"
  30. name="error-file"
  31. layout="${longdate}|${uppercase:${level}}|${event-properties:item=EventId.Id}${newline}位置:${callsite:className=True:methodName=True:fileName=True:includeSourcePath=True:skipFrames=1}${newline}${message}${newline}${exception}${newline}"
  32. fileName="c:\logfiles\api\error-${shortdate}.log"
  33. archiveFileName="c:\logfiles\error-${shortdate}.log"
  34. archiveAboveSize="10485760"
  35. archiveNumbering="Rolling"
  36. concurrentWrites="true"
  37. maxArchiveFiles="100000"
  38. keepFileOpen="false"
  39. />
  40.  
  41. <!--write to the void aka just remove-->
  42. <target xsi:type="Null" name="blackhole" />
  43. </targets>
  44.  
  45. <!--写入目的地的规则-->
  46. <rules>
  47. <!--记录level为info的日志-->
  48. <!-- 跳过以Microsoft.*开头的日志 -->
  49. <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
  50. <logger name="*" level="Info" writeTo="info-file" />
  51.  
  52. <!--记录level为error的日志-->
  53. <logger name="*" level="Error" writeTo="error-file" />
  54.  
  55. </rules>
  56. </nlog>
nlog 节点必须是 xml 文件的根节点,包含三个主要的子节点:extensions、targets、rules。
extensions节点:用来加载nlog扩展工具,这里加载NLog.Web.AspNetCore 是为 ASP.NET Core 添加了对于 NLog 的平台支持。
targets节点:包含输出的日志的一些设置(比如的日志的路径、类型、布局、txt文件的分割等)。
rules节点:将需要日志级别关联到targets里设置的日志。
 
targets节点的子节点描述:
layout表示输出日志到txt的排版格式
fileName表示txt文件名,这里我把日志文件存在在C盘(linux系统,改下路径即可)
maxArchiveFiles表示滚动日志文件上限数
archiveFileName表示滚动日志存放路径,超过单个文件大小,会生成如error-2019-03-30.1.log的文件
archiveAboveSize表示每个日志文件大小的最大值(单位:字节),10485760=10M
 
2、在 Startup.cs的Configure方法配置nlog,如下:
  1. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
  2. {
  3. if (env.IsDevelopment())
  4. {
  5. app.UseDeveloperExceptionPage();
  6. }
  7. else
  8. {
  9. app.UseHsts();
  10. }
  11.  
  12. //配置NLog
  13. Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);//这是为了防止中文乱码
  14. loggerFactory.AddNLog();//添加NLog
  15. env.ConfigureNLog("nlog.config");//读取Nlog配置文件
  16.  
  17. app.UseHttpsRedirection();
  18. app.UseMvc();
  19. }

五、使用NLog

在webapi的HomeController里代码如下:

  1. [Route("api/Home/[action]")]
  2. [ApiController]
  3. public class HomeController : ControllerBase
  4. {
  5. public ActionResult<IEnumerable<string>> Get()
  6. {
  7. NLogHelper.Info("这是info日志");
  8. NLogHelper.Error("这是error日志",new Exception("测试"));
  9. //这里随便返回一下
  10. return new string[] { "value1", "value2" };
  11. }
  12. }

运行:https://localhost:5001/api/home/get

在C盘生成文件,如下:

打开txt文件,日志格式如下:

六、源码

码云:https://gitee.com/qk2017/CoreNLogDemo

CSDN:https://download.csdn.net/download/coderk2014/11074608

asp.net core 使用NLog记录日志到txt文件的更多相关文章

  1. ASP.NET Core使用NLog记录日志到Microsoft Sql Server

    在之前的文章中介绍了如何在ASP.NET Core使用NLog,本文为您介绍在ASP.NET Core使用NLog记录到Microsoft Sql Server 1.我们需要添加依赖: NLog.We ...

  2. ASP.NET Core使用NLog记录日志

    1.根目录新建nlog.config配置文件 <?xml version="1.0"?> <nlog xmlns="http://www.nlog-pr ...

  3. ASP.NET Core 添加NLog日志支持(VS2015update3&VS2017)

    1.创建一个新的ASP.NET Core项目 2.添加项目依赖 NLog.Web.AspNetCore 3.在项目目录下添加nlog.config文件: <?xml version=" ...

  4. asp.net core结合NLog搭建ELK实时日志分析平台

    0.整体架构 整体架构目录:ASP.NET Core分布式项目实战-目录 一.介绍ELK 1.说明(此篇ELK采用rpm的方式安装在服务器上)-牛刀小试 承接上一篇文章的内容准备部署ELK来展示asp ...

  5. asp.net core流式上传大文件

    asp.net core流式上传大文件 首先需要明确一点就是使用流式上传和使用IFormFile在效率上没有太大的差异,IFormFile的缺点主要是客户端上传过来的文件首先会缓存在服务器内存中,任何 ...

  6. 学习ASP.NET Core Razor 编程系列十五——文件上传功能(三)

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  7. ASP.NET Core 2.2 附加的数据文件存放在项目文件夹内

    在ASP.NET 4.x中(包括ASP.NET MVC 5),可以通过附加数据库文件的方式,将数据库保存在项目的文件中.这种方式对于不同时段需要更换计算机(白天办公室,晚上家里)开发时带来好处. 而. ...

  8. 15.ASP.NET Core 应用程序中的静态文件中间件

    在这篇文章中,我将向大家介绍,如何使用中间件组件来处理静态文件.这篇文章中,我们讨论下面几个问题: 在ASP.NET Core中,我们需要把静态文件存放在哪里? 在ASP.NET Core中 wwwr ...

  9. ASP.NET Core之NLog使用

    1.新建ASP.NET Core项目 1.1选择项目 1.2选择.Net版本 2. 添加NLog插件 2.1 通过Nuget安装 2.2下载相关的插件 3.修改NLog配置文件 3.1添加NLog配置 ...

随机推荐

  1. vue 父子之间通信及非父子之间通信

    直接看图说话 vue Bus总线 import Vue from 'vue';import VueBus from 'vue-bus';Vue.use(VueBus); 这是子组件要发到父组件的写法 ...

  2. 别再用"while (!feof(file))"来逐行读取txt文件了!

    起因 执行一个C/C++程序出现segment fault.它逐行读取文本文件,每一行是一个图片名字,然后读图.处理图像,etc. 发现最后一次读取的文件名不存在(空的). 正确的逐行读取txt文件 ...

  3. Android人脸检测1(静态图片)

    搭建Android人脸识别环境花了很长时间(可以查看之前的文章),解决Android开发中的杂七杂八小问题也耗时不少. 今天记录一下,点击选择照片或者拍照上传照片进行人脸检测的小demo. (andr ...

  4. Redis数据结构之sds基本操作函数

    本文及后续文章,Redis版本均是v3.2.8 本篇文章讲解sds基本操作函数,我们从源码角度来进一步理解. 一.sds创建函数和销毁 sds创建函数 /* Create a new sds stri ...

  5. php接入支付宝的流程(转载)

    php接入支付宝的流程写在这里供像我一样的小白参考. 1.首先要有一个创建一个应用(选好自己想要的功能,关于支付的功能,貌似都需要签约) 2.下载SDK&Dome(网址https://doc. ...

  6. JAVA基础复习与总结<一> 对象与类的概念_内部类_继承与多态

    一.对象与类 类:类是一个模版,它描述了一类对象的行为和状态. class animal { private int color; private int size; public void eat ...

  7. Android项目中的config.xml文件 “config.xml”

    Android应用程序需要保存一些配置时,可以将这些配置项放置到values/config.xml文件中. 实例分析: <?xml version="1.0" encodin ...

  8. Ubuntu12.04 LTS 32位 安装ns-2.35

    ubuntu12.04lts 32-bit默认采用gcc 4.6和g++4.6,而ns的最新版本ns 2.3.5也采用了相同到版本,所以这方面不会有版本不同到问题 收回上面这句话..../valida ...

  9. Java for Android 学习第一周

    前言 专业Java程序员所必需掌握的3个主题: 1. Java编程语言 2. 使用Java的面向对象编程(OOP) 3. Java核心库 JDK.JRE和JVM 1. javac编译java源代码为字 ...

  10. JavaFTP文件传输上传和下载文件

    首先在电脑上创建一个ftp服务器,具体步骤自行百度. 接下来开始写有用的java连接TFP站点和传输文件的代码. 1.首先jar用的是apache 的工具包 请自行下载 . 2.俩个文件代码 一个Ft ...