博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ASP.NET Core 2.0系列学习笔记-NLog日志配置文件

Posted on 2019-04-14 17:59  火冰·瓶  阅读(614)  评论(0编辑  收藏  举报

一、新建ASP.NET Core 2.0 MVC项目,使用NuGet在浏览中搜索:NLog.Web.AspNetCore,如下图所示:

二、在项目的根目录下新建一个xml类型的nlog.config文件

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}|${logger}|${uppercase:${level}}|${message} ${exception}" />
 
    <target xsi:type="File" name="ownFile-web" fileName="nlog-my-${shortdate}.log"
                 layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
 
    <target xsi:type="Null" name="blackhole" />
 
  </targets>
 
  <rules>
    <!--All logs, including from Microsoft-->
    <logger name="*" minlevel="Trace" writeTo="allfile" />
 
    <!--Skip Microsoft logs and so log only own logs-->
    <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
    <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
  </rules>
 
</nlog>

 

三、在Startup类中添加配置

在Configure方法中增加ILoggerFactory loggerFactory参数,然后添加2行代码, 如下所示:

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseCookiePolicy();
            app.UseAuthentication();

            
            loggerFactory.AddNLog();//*****使用NLog作为日志记录工具
            env.ConfigureNLog("Nlog.config");//*****引入Nlog配置文件

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }

  四、Program.cs中绑定

 public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .UseNLog();//使用Nlog日志

  五、在控制器IActionResult中使用Nlog

//获得日志的实例
public static Logger nlog = LogManager.GetCurrentClassLogger();
public IActionResult Index()
{
     nlog.Info("普通信息日志-----------");
     nlog.Debug("调试日志-----------");
     nlog.Error("错误日志-----------");
     nlog.Fatal("异常日志-----------");
     nlog.Warn("警告日志-----------");
     nlog.Trace("跟踪日志-----------");
     nlog.Log(LogLevel.Warn, "Log日志------------------");
     return View();
 }

  

注:NLog日志的位置默认是在bin\Debug下面。

参考:http://www.voidcn.com/article/p-hukbuiwx-bch.html

 

 

 

其他参考的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:\log\internal-nlog.txt">


  <!-- the targets to write to -->
  <targets>
    <!-- write logs to file  -->
    <target xsi:type="File" name="allfile" fileName="d:\log\nlog-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\nlog-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>

  

 

自己配置的的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"
      throwExceptions="false"
      internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
  <!--autoReload修改配置文件后是否允许自动加载无须重启程序-->
  <!--throwExceptions 内部日志系统抛出异常,建议throwExceptions的值设为“false”,这样由于日志引发的问题不至于导致应用程序的崩溃。-->
  <!--internalLogLevel 可选Trace|Debug|Info|Warn|Error|Fatal决定内部日志的级别 Off 关闭-->
  <!--internalLogFile 把内部的调试和异常信息都写入指定文件里-->



  <!--定义常量-->
  <variable name="logDirectory" value="${basedir}/logs/${shortdate}"/>
  <variable name="layoutVal" value="${longdate} ${uppercase:${level}} ${message}"/>
  
  
  
  

  <targets>
    <!--输出目标:
    name名称,
    xsi:type输出类型文件, 
    fileName输出到程序根目录logs文件夹中, 以日期作为生成log文件名称, 
    maxArchiveDays="14"  保留14天内的日志
    maxArchiveFiles="14"  保留文档最大数量为14
    layout生成内容的格式
    -->
    <target name="all"
        xsi:type="File"
        encoding="utf-8"
        fileName="${logDirectory}/all.log"
        maxArchiveDays="7"
        maxArchiveFiles="7"
        layout="${layoutVal}" />
    <target name="debug"
        xsi:type="File"
        encoding="utf-8"
        fileName="${logDirectory}/debug.log"
        maxArchiveDays="7"
        maxArchiveFiles="7"
        layout="${layoutVal}" />
    <target name="error"
        xsi:type="File"
        encoding="utf-8"
        fileName="${logDirectory}/error.log"
        maxArchiveDays="14"
        maxArchiveFiles="14"
        layout="${layoutVal}" />
  </targets>
  
  <!--不输出-->
  <target xsi:type="Null" name="blackhole" />
  
  
  
  
  <rules>
<!--
name:记录者的名字。
minlevel :最低日志级别。
maxlevel:最高日志级别。
level:单一日志级别。
levels:一系列日志级别,由逗号分隔。
final:是否是最后的匹配路由,true表示匹配到这里就结束。
writeTo:规则匹配时日志应该被写入的一系列目标,由逗号分隔。就是tagets对应的name。
日志级别有如下,自上而下,等级递增。
- Trace - 最常见的记录信息,一般用于普通输出
- Debug - 同样是记录信息,不过出现的频率要比Trace少一些,一般用来调试程序
- Info - 信息类型的消息
- Warn - 警告信息,一般用于比较重要的场合
- Error - 错误信息
- Fatal - 致命异常信息。一般来讲,发生致命异常之后程序将无法继续执行。
-->

    <!--Info级别以上日志写入info-->
    <logger name="*" minlevel="Trace" writeTo="all" />

    <!--屏蔽掉微软系统日志,只输出自己的日志-->
    <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />

    <!--Debuy日志,单独写入debug-->
    <logger name="*" level="Debug" writeTo="debug" />

    <!--Error日志,单独写入error-->
    <logger name="*" level="Error" writeTo="error" />

  </rules>
  
</nlog>