c#Nlog文本日志,控制台日志,事件查看器日志

Nlog和EventLog的功能

  Nlog是比较方便的日志  功能要比log4要多,支持很多的日志输出方式,例如 ,控制台,文件,邮箱等等。
 EventLog 可以把日志输出到windows自带的事件管理器
  话不多说直接开始图文讲解

本次教程用的是依赖注入的框架引用的写法,不懂的同学可以去看一下基础语法,这里我就不多说了

为了方便展示功能用的控制台,我们先vs创建一个控制台管理项目,其次在添加Logging.Console的nuget引用
Logging.Console的nuget引用包括了依赖注入需要的引用所以就无需下载依赖注入需要的nuget,如对依赖注入的nuget
包版本有需求可自行更改
请添加图片描述然后我们搭建依赖注入的框架

namespace Program
{
    class Program
    {
        static void Main(string[] args)
        {
            ServiceCollection service = new ServiceCollection();
            service.AddLogging(t =>
            {
                t.AddConsole();//添加log日志输出
                t.SetMinimumLevel(LogLevel.Trace);//设置最高显示的日志级别
            });
            using (var sp = service.BuildServiceProvider())
            {


            }

            Console.ReadKey();
        }
    }
}

接着我们创建一个Test类用作输出日志文本

    public  class Test
    {
        private readonly ILogger<Test> logger;

        public Test(ILogger<Test> logger)
        {

            this.logger = logger;

        }

        public void qqq() {
            logger.LogDebug("11111111111111日志Debug");
            logger.LogWarning("2222222222222222日志Warning");
            logger.LogError("3333333333333日志Error");
        }
    }

然后把test类加入到依赖中,接着运行

            ServiceCollection service = new ServiceCollection();
            service.AddLogging(t =>
            {
                t.AddConsole();//添加log日志输出
                t.SetMinimumLevel(LogLevel.Trace);//设置最高显示的日志级别
            });
            service.AddScoped<Test>();
            using (var sp = service.BuildServiceProvider())
            {
                var testq = sp.GetRequiredService<Test>();


                testq.qqq();


            }

            Console.ReadKey();

这时我们可以看到控制台已经打印了我们的日志
请添加图片描述此时已经完成基本的控制台输日志

windows的事件查看器

首先需要下载nuget包
请添加图片描述然后添加到依赖运行即可

             t.AddEventLog();//把日志输入到windows的事件管理器,只支持windows系统   需要下载nuget  Microsoft.Extensions.Logging.EventLog

这时候我们打开事件查看器可以看到已经打印出来了
请添加图片描述

Nlog

以上只能满足控制台的日志输出,,而且事件管理器linux是没有的。无法满足项目中日志文件的需求,这时候我们就需要用到nlog进行一些复杂的日志输出

首先老样子,先把nlog的nuget包下载下来

请添加图片描述nlog是需要配置config文件的,
首先我们去nlog官网复制他的config文件
https://github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-6
请添加图片描述然后本地项目创建一个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"
      internalLogLevel="Info"
      internalLogFile="c:\temp\internal-nlog-AspNetCore.txt">

  <!-- enable asp.net core layout renderers -->
  <extensions>
    <add assembly="NLog.Web.AspNetCore"/>
  </extensions>

  <!-- the targets to write to -->
  <targets>
    <!--xsi:type代表的文件类型   
    fileName=输出到的地址   
    name=日志名称   
    layout=文件的输出格式
    archiveAboveSize   表示日志文件最大为多少字节   超过就存档就是重新创建一个
    maxArchiveFiles   表示最多保存多少个文件
    maxArchiveDays  日志保存多少天-->
    <target xsi:type="File" name="allfile" fileName="logs/log-${shortdate}.log"
            layout="${longdate}|${event-properties:item=EventId:whenEmpty=0}|${level:uppercase=true}|${logger}|${message} ${exception:format=tostring}"   archiveAboveSize="1000" maxArchiveFiles="3"/>

    <!-- File Target for own log messages with extra web details using some ASP.NET core renderers -->
    <target xsi:type="File" name="ownFile-web" fileName="nlog-AspNetCore-own-${shortdate}.log"
            layout="${longdate}|${event-properties:item=EventId:whenEmpty=0}|${level:uppercase=true}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}|${callsite}" />

    <!--Console Target for hosting lifetime messages to improve Docker / Visual Studio startup detection -->
    <target xsi:type="Console" name="lifetimeConsole" layout="${MicrosoftConsoleLayout}" />
  </targets>

  <!-- rules to map from logger name to target -->
  <rules>
    <!--日志进来之后是按顺序从上往下匹配   
    writeTo是代表输出到哪个日志 比如 writeTo="allfile"就是把日志输出到name值等于allfile的日志    
    final="true"表示日志如同通过就不继续往下匹配了 如果没通过在继续往下匹配    
    minlevel=最小显示的日志级别 
   maxlevel表示最大级别的日志
   name表示名称  有多种发写法  比如  abc.*表示abc开头的日志都输出-->
    <logger name="*" minlevel="Info"  writeTo="allfile" />

    <!--Output hosting lifetime messages to console target for faster startup detection -->
    <logger name="Microsoft.Hosting.Lifetime" minlevel="Info" writeTo="lifetimeConsole, ownFile-web" final="true" />

    <!--Skip non-critical Microsoft logs and so log only own logs (BlackHole) -->
    <logger name="Microsoft.*" maxlevel="Info" final="true" />
    <logger name="System.Net.Http.*" maxlevel="Info" final="true" />

    <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
  </rules>
</nlog>

我已对文件进行调整方便展示效果,过多就不细说了,具体属性意思可看注释,多的可以去nlog官网看文档
创建的nlog.config文件要设置成较新则复制
请添加图片描述

接着我们循环10000次执行日志输出任务并且把不需要的包注释掉

   //t.AddConsole();//添加log日志输出
  //t.AddEventLog();//把日志输入到windows的事件管理器,只支持windows系统   需要下载nuget  Microsoft.Extensions.Logging.EventLog
          using (var sp = service.BuildServiceProvider())
            {
                var testq = sp.GetRequiredService<Test>();


                for (int i = 0; i < 10000; i++)
                {
                    testq.qqq();
                }


            }

这时候就自动创建文本日志了,我设置放在bin文件的根目录下了,大家可去自己设置的路径下查看
请添加图片描述

Logo

更多推荐