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

应用离不开日志,虽然现在使用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");
           //************
        }

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

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

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

a.安装nlog

在nuget中搜索并安装 nlog.web.aspnetcore , 当前版本是4.5.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:lognlog-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:lognlog-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.*"的日志。

 

本文链接:https://2i3i.com/aspnetcore2_12.html ,转载请注明来源地址。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇