ASP.NET Core 2.1 : 十二.内置日志、使用Nlog将日志输出到文件(转)

摘要:
ASP。NETCore系列目录应用程序不能没有日志。尽管VS具有强大的调试功能,并且在不复杂的开发过程中懒得输出日志,但日志在一些复杂的过程中和应用程序的日常操作中仍然非常有用。ASP。NETCore提供内置日志,但我不知道如何将它们输出到这样的文件中。它们只能在VS输出中查看。谁知道怎么告诉我。

ASP.NET Core 系列目录

应用离不开日志,虽然现在使用VS有强大的调试功能,开发过程中不复杂的情况懒得输出日志了(想起print和echo的有木有),但在一些复杂的过程中以及应用日常运行中的日志还是非常有用。

  ASP.NET Core提供了内置的日志,但没弄明白这么把它输出到文件, 只能在VS的输出中查看, 谁知道怎么弄告诉我一下。(ASP.NET Core 系列目录) 本例 GitHub

一、内置日志的使用

  上一篇:如何在后台运行一个任务  中使用到了内置的日志,直接在构造中注入一下,然后直接使用即可, 非常方便

复制代码
        public TokenRefreshService(ILogger<TokenRefreshService> logger)
        {
            _logger = logger;
        }

        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            _logger.LogInformation("Service starting");
           //************
        }
复制代码

然后在【输出】窗口中就可以看到输出的日志了:

ASP.NET Core 2.1 : 十二.内置日志、使用Nlog将日志输出到文件(转)第3张

想把它输出到txt中, 没找到相应的方法,试试常见的Nlog吧

二、使用Nlog将日志输出到文件

A.安装Nlog

在NuGet中搜索并安装 NLog.Web.AspNetCore , 当前版本是4.5.4

ASP.NET Core 2.1 : 十二.内置日志、使用Nlog将日志输出到文件(转)第4张

 B.添加配置文件

新建一个文件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"
      throwConfigExceptions="true"
      internalLogLevel="info"
      internalLogFile="d:loginternal-nlog.txt">


  <!-- the targets to write to -->
  <targets>
    <!-- write logs to file  -->
    <target xsi:type="File" name="allfile" fileName="d:log
log-all-${shortdate}.log"
            layout="${longdate}|${event-properties:item=EventId_Id:whenEmpty=0}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />

    <!-- another file log, only own logs. Uses some ASP.NET core renderers -->
    <target xsi:type="File" name="ownFile-web" fileName="d:log
log-own-${shortdate}.log"
            layout="${longdate}|${event-properties:item=EventId_Id:whenEmpty=0}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}|${callsite}" />
  </targets>

  <!-- rules to map from logger name to target -->
  <rules>
    <!--All logs, including from Microsoft-->
    <logger name="*" minlevel="Trace" writeTo="allfile" />

    <!--Skip non-critical Microsoft logs and so log only own logs-->
    <logger name="Microsoft.*" maxlevel="Info" final="true" />
    <!-- BlackHole -->
    <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
  </rules>
</nlog>
复制代码

C.修改Program.cs文件

 在 .UseStartup<Startup>() 后添加一句 .UseNLog() 

三、注意事项

按照第二节的描述,NLog已经可以正常使用了,有些细节做一下简要说明:

1. 文件nlog.config的这个名字应该是默认读取的文件名(官方建议全部小写,linux系统中要注意),如果用了别的名字,可以在Program.cs文件中通过 ConfigureNLog 方法设置,见下面代码示例。

2. 现在如第一节内置的例子中一样, VS的输出框仍然在输入日志,也就是二者都在生效状态,想只用Nlog,可以调用 logging.ClearProviders(); 

3. 注意输出目录的权限问题。

代码示例:

复制代码
 1     public class Program
 2     {
 3         public static void Main(string[] args)
 4         {
 5             NLog.Web.NLogBuilder.ConfigureNLog("nlog1.config");  //假如没有用默认的名字,多写了一个1
 6             CreateWebHostBuilder(args).Build().Run();
 7         }
 8 
 9         public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
10             WebHost.CreateDefaultBuilder(args)
11                 .UseStartup<Startup>()
12                 .ConfigureLogging(logging =>
13                 {
14                     logging.ClearProviders(); //移除已经注册的其他日志处理程序
15                     logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace); //设置最小的日志级别
16                 })
17                 .UseNLog();  
18     }
复制代码
四、NLog配置简要说明

    “简要”的说一下NLog的配置:

1.上文提到了一个日志级别,这个级别大概分为6个,由低到高如下:

复制代码
1 logger.LogTrace();
2 logger.LogDebug();
3 logger.LogInformation();
4 logger.LogWarning();
5 logger.LogError();
6 logger.LogCritical();
复制代码

2. 通过上面的例子,看输出的日志文件有3个, 这是在nlog.config中配置的, 通过文件名可以找到对应的配置。

  •   internal-nlog 记录了NLog的启动及加载config的信息。
  •   nlog-all 记录了所有日志
  •  nlog-own 记录了我们自定义的日志

这是为什么呢?config中有两个关键标签<targets>和 <rules>

  • <targets>   用于配置输出相关内容,比如 type 属性可选项为File、Mail、Console等,用于设置输出目标,layout属性用于设置输出信息的组成元素及格式。
  • <rules> : 这里有个坑,一看这个标签,简单理解成了“规则”,而恰好例子中的两个<rule>正好对应了上面的两个<target>,writeTo属性指定了对应的<target>。可仔细一看,两个的<rule>配置差不多,为什么下面的一个就只输出了我们自定义的log呢?看帮助才知道这是一个“路由表”,日志是从上到下匹配的。 <logger name="Microsoft.*" maxlevel="Info" final="true" /> 一句话的 final="true" 过滤掉了"Microsoft.*"的日志。

ASP.NET Core 系列目录 

原文地址:https://www.cnblogs.com/FlyLolo/p/ASPNETCore2_12.html

免责声明:文章转载自《ASP.NET Core 2.1 : 十二.内置日志、使用Nlog将日志输出到文件(转)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vba遍历指定的文件夹parent 与owner的含义区别及举例下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Apollo的基本概念和集成实战

基本概念 使用场景 是一个分布式的配置中心。适用于微服务; 核心功能 集中管理不同环境,不同集群的配置; 配置修改后可以实时推送到应用端; 具备规范的权限,流程治理特性; 开发技术 服务端使用springboot,springcloud开发,打包后可以直接运行,无需安装额外的tomcat; java客户端不依赖任何框架,对Spring,Spring...

git使用ssh密钥和https两种认证方式汇总(转)

在版本库的SSH方式和HTTPS方式是不同的,具体来说就是url信息的不同,但是,实际的认证机制也是不同的。当建立了本机密钥之后,使用ssh方式实际上是不需要再次认证的,而https则每次需要输入密码 。《Help.GitHub - SSH key passphrases》里也说了用SSH更方便更安全,不需要去输入长长的密码。 我去看了下repo目录下的....

log4net 配置

1.在项目中引入log4net.dll组件; 2.在App.congfig中做如下修改(可省略) 在加入如下内容: 这个节点最好放在<configuration>下的第一个位置,不然在服务里会报错。 <configSections> <section name="log4net" type="log4net.Config.Lo...

umijs 开发优化和生产优化

.umirc.ts import { defineConfig } from 'umi'; import dev from './config/dev'; import prod from './config/prod'; console.log(process.env.NODE_ENV); const envConfig = 'developmen...

Node.js及npm详细安装教程

一、使用之前,我们先来掌握3个东西是用来干什么的。 npm: Nodejs下的包管理器。 webpack: 它主要的用途是通过CommonJS的语法把所有浏览器端需要发布的静态资源做相应的准备,比如资源的合并和打包。 vue-cli: 用户生成Vue工程模板。(帮你快速开始一个vue的项目,也就是给你一套vue的结构,包含基础的依赖库,只需要 npm in...

vue 项目中使用 wangEditor

1,vue中安装wangEditor  使用的npm安装 npm install wangeditor --save 2,创建公用组件  在components中创建wangEditor文件夹 组件内容为 <template lang="html"> <div class="editor"> <div ref="t...