zoukankan      html  css  js  c++  java
  • NLog在.NET Core Console Apps中的简单应用

    什么是NLog?

    NLog is a free logging platform for .NET with rich log routing and management capabilities. It makes it easy to produce and manage high-quality logs for your application regardless of its size or complexity.

    It can process diagnostic messages emitted from any .NET language, augment them with contextual information, format them according to your preference and send them to one or more targets such as file or database.

    NLog在GitHub的官网:https://github.com/NLog

    NLog for .NET Core:https://github.com/NLog/NLog.Extensions.Logging

    创建一个.NET Core Console 应用

    使用CLI(Command Line Interface)创建一个example程序:

    • dotnet new
    • dotnet restore
    • dotnet run

    这些命令行的具体意思这里就不再赘述。

    更改project.json的配置

    主要是新增了NLog相关的配置:

    • NLog的包引用;
    • 程序发布时包含NLog的配置文件。

    新增NLog的配置文件

    在程序的根目录下新增NLog的配置文件: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="Warn"
          internalLogFile="internal-nlog.txt">
    
      <!-- define various log targets -->
      <targets>
        <!-- write logs to file -->
        <target xsi:type="File" name="allfile" fileName="nlog-all-${shortdate}.log"
                     layout="${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|${message} ${exception}" />
    
        <target xsi:type="File" name="ownFile-web" fileName="nlog-own-${shortdate}.log"
                 layout="${longdate}|${threadid}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|  ${message} ${exception}" />
    
        <target xsi:type="Null" name="blackhole" />
      </targets>
    
      <rules>
        <!--Skip Microsoft logs and so log only own logs-->
        <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
        <!--All logs, including from Microsoft-->
        <logger name="*" minlevel="Trace" writeTo="allfile" />
        <logger name="*" minlevel="Info" writeTo="ownFile-web" />
      </rules>
    </nlog>

    在Startup类中注册NLog的MiddleWare

     1 using Microsoft.AspNetCore.Builder;
     2 using Microsoft.AspNetCore.Hosting;
     3 using Microsoft.AspNetCore.Http;
     4 using Microsoft.Extensions.Logging;
     5 using NLog.Extensions.Logging;
     6 
     7 namespace ConsoleApplication
     8 {
     9     public class Startup
    10     {
    11         public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    12         {
    13             // Add NLog to ASP.NET Core
    14             loggerFactory.AddNLog();
    15             
    16             // configure nlog.config in your project root
    17             env.ConfigureNLog("nlog.config");
    18 
    19             app.Run(context =>
    20             {
    21                 return context.Response.WriteAsync("Hello World!!");
    22             });
    23         }
    24     }
    25 }

    在入口类中记录日志

     1 using System.Threading;
     2 using Microsoft.AspNetCore.Hosting;
     3 using NLog;
     4 
     5 namespace ConsoleApplication
     6 {
     7     public class Program
     8     {
     9         private static Logger logger = LogManager.GetCurrentClassLogger();
    10         public static void Main(string[] args)
    11         {
    12             logger.Info("Server is running...");
    13             logger.Info(string.Format("Current Thead Id:{0}", Thread.CurrentThread.ManagedThreadId));
    14             var host = new WebHostBuilder().UseKestrel().UseStartup<Startup>().Build();
    15             host.Run();
    16         }
    17     }
    18 }

    运行程序后会在主目录下生成2个日志文件:

     

  • 相关阅读:
    Java内存模型解惑--观深入理解Java内存模型系列文章有感(二)
    Java内存模型解惑--观深入理解Java内存模型系列文章有感(一)
    Java内存模型以及Volatile、Synchronize关键字的疑问
    关于java的volatile关键字与线程栈的内容以及单例的DCL
    SpringMVC绑定到实体数组、list、set、和map时要注意
    flutter中的动画
    mysql连接池如何确定大小?
    node下的ORM框架 Sequelize
    解决Node下MySQL客户端不支持认证协议引发的"ER_NOT_SUPPORTED_AUTH_MODE"问题
    node koa2 常用中间件和安装包
  • 原文地址:https://www.cnblogs.com/frankyou/p/5694306.html
Copyright © 2011-2022 走看看