zoukankan      html  css  js  c++  java
  • asp.net core 使用NLog记录日志到txt文件

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

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

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

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

    using System;
    using Microsoft.Extensions.Logging;
    using NLog;
    
    namespace common
    {
        public class NLogHelper
        {
            //每创建一个Logger都会有一定的性能损耗,所以定义静态变量
            private static Logger nLogger = LogManager.GetCurrentClassLogger();
            
            public static void Info(string msg)
            {
                nLogger.Info(msg);
            }        
            
            public static void Error(string msg, Exception ex = null)
            {
                if (ex == null)
                    nLogger.Error(msg);
                else
                    nLogger.Error(ex,msg);
            }
        }
    }

    四、webapi项目配置NLog

    1、添加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"
          throwConfigExceptions="true"
          autoReload="true">
     
      <!--加载ASP.NET Core插件-->
      <extensions>
        <add assembly="NLog.Web.AspNetCore"/>
      </extensions>
     
      <!--输出目的地-->
      <targets>  
    
        <!--输出到文件,记录level为info的日志-->
        <target xsi:type="File" 
                name="info-file"
                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}" 
                fileName="c:logfilesapiinfo-${shortdate}.log"
                archiveFileName="c:logfilesinfo-${shortdate}.log"
                archiveAboveSize="10485760"
                archiveNumbering="Rolling"
                concurrentWrites="true"
                maxArchiveFiles="100000"
                keepFileOpen="false"
        />
    
        <!--输出到文件,记录level为error的日志-->
        <target xsi:type="File" 
                name="error-file" 
                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}" 
                fileName="c:logfilesapierror-${shortdate}.log"
                archiveFileName="c:logfileserror-${shortdate}.log"
                archiveAboveSize="10485760"
                archiveNumbering="Rolling"
                concurrentWrites="true"
                maxArchiveFiles="100000"
                keepFileOpen="false"
        />
     
        <!--write to the void aka just remove-->
        <target xsi:type="Null" name="blackhole" />
      </targets>
     
      <!--写入目的地的规则-->
      <rules>  
        <!--记录level为info的日志-->
        <!-- 跳过以Microsoft.*开头的日志 -->
        <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
        <logger name="*" level="Info" writeTo="info-file" />
    
        <!--记录level为error的日志-->
        <logger name="*" level="Error" writeTo="error-file" />
     
      </rules>
    </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,如下:
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
                else
                {
                    app.UseHsts();
                }
    
                //配置NLog
                Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);//这是为了防止中文乱码
                loggerFactory.AddNLog();//添加NLog
                env.ConfigureNLog("nlog.config");//读取Nlog配置文件
    
                app.UseHttpsRedirection();
                app.UseMvc();
            }

    五、使用NLog

    在webapi的HomeController里代码如下:

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

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

    在C盘生成文件,如下:

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

     六、源码

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

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

  • 相关阅读:
    2017.10.25总结与回顾
    2017.10.24总结与回顾
    CSS盒子模型
    2017.10.23学习知识总结回顾及编写新网页
    JAVA与mysql之间的编码问题
    想写好代码,送你三个神器
    Vue+highligh.js实现语法高亮(转)
    Vue.JS实现复制到粘帖板功能
    npm install、npm install --save与npm install --save-dev区别(转)
    ES7与ES8新特性
  • 原文地址:https://www.cnblogs.com/qk2014/p/10627343.html
Copyright © 2011-2022 走看看