`
jiasongmao
  • 浏览: 647795 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

.NET使用NLog记录日志信息(三)

    博客分类:
  • .NET
阅读更多

自动重新配置

NLog的配置文件将在程序启动之后自动加载。对于某些将长时间运行的进程(例如Windows服务或ASP.NET应用程)来说,往往需要在程序运行当中临时性地提高记录等级,而这时我们却并不希望重新启动该应用程序。NLog可以自动跟踪其配置文件的变化,一旦配置文件被修改,NLog将立即自动重新加载。我们可以通过在配置文件中设置<nlog autoReload="true" />来实现该需求。这种自动重新配置功能也会应用到被包含的文件上,也就是说若包含文件发生了变化,NLog同样将自动重新加载整个的配置文件。

 

日志功能排错

虽然已经配置好了NLog,可是有些时候应用程序仍旧会出现一些难以理解的问题,例如没有任何日志输出。其中最常见的原因就是ASP.NET的权限——ASP.NET的aspnet_wp.exe或w3wp.exe可能没有对NLog配置文件中指定目录的写入权限。NLog对于其自身运行中发生的异常有着很强的监测能力。如下设定可以将这些监测结果输出至指定位置,或是对这些异常进行相应的处理(默认设定将忽略自身异常):

  • <nlog throwExceptions="true" />- 当NLog自身掷出异常时,该选项可以将异常掷回日志的调用者。在开发过程中,这个设定将变得非常有用,能够迅速帮助我们定位异常的位置以及原因。而当程序开发结束并部署到应用环境时,应该尽快设定throwExceptions为false,免得NLog自身的异常导致整个应用程序的崩溃。
  • <nlog internalLogFile="file.txt" />- 让NLog将自身运行过程中的日志信息(包括可能出现的异常)写入到文件中。
  • <nlog internalLogLevel="Trace|Debug|Info|Warn|Error|Fatal" /> - 选择写入内部日志的记录等级。该等级设定的越高,相应的输出日志文件将越小。
  • <nlog internalLogToConsole="false|true" /> - 将内部日志信息发送至控制台。
  • <nlog internalLogToConsoleError="false|true" /> - 将内部日志信息发送至标准异常输出(stderr)。

 

异步处理、包装器(Warpper)以及复合输出目标

NLog的包装器和复合输出目标特性让我们能够修改输出目标的默认行为,这种修改体现在如下几个方面:

  • 异步处理(向目标输出将用单独的线程处理)
  • 异常时自动重试
  • 负载平衡
  • 缓存 
  • 过滤 
  • 备用输出目标(主输出目标失败时启用备用输出目标)
  • 其他,请参考http://www.nlog-project.org/targets.html

只要在配置文件中将若干个target节点嵌套起来,即可完成对包装器或复合输出目标的定义。嵌套深度没有任何限制。例如为某个输出目标添加异步处理以及异常自动重试功能,只要按照如下代码配置NLog即可:

<targets> 
  <target name="n" xsi:type="AsyncWrapper"> 
    <target xsi:type="RetryingWrapper"> 
      <target xsi:type="File" fileName="${file}.txt"/> 
    </target> 
  </target> 
</targets> 

 

异步处理特性极为常用,因此NLog提供了一种简写方式——即<targets async="true" />,这样该输出目标将自动应用AsyncWrapper包装器。

 

以编程方式进行配置

某些情况下我们可能不愿用配置文件来配置NLog,而是选择使用NLog的配置API进行。对这些API的详细介绍已经超过了本文的范围,所以我们这里仅仅简单介绍一些。若希望以编程的方式对NLog进行配置,我们需要:

  1. 创建一个LoggingConfiguration对象,用来保存配置信息
  2. 至少创建一个输出目标对象
  3. 设置该输出目标对象的属性
  4. 设置LoggingRule对象,并将其添加到LoggingConfiguration对象的LoggingRules集合中
  5. 启用该LoggingConfiguration对象(将LogManager.Configuration设定为该LoggingConfiguration对象即可)

下面的代码片段以编程方式创建了两个输出目标对象——支持颜色的控制台和文件,并将记录等级等于或高于Debug的日志信息发送至这两个输出目标:

using NLog; 
using NLog.Targets; 
using NLog.Config; 
using NLog.Win32.Targets; 
 
class Example 
{ 
    static void Main(string[] args) 
    { 
        // Step 1. Create configuration object 
         
        LoggingConfiguration config = new LoggingConfiguration(); 
         
        // Step 2. Create targets and add them to the configuration 
 
        ColoredConsoleTarget consoleTarget = new ColoredConsoleTarget(); 
        config.AddTarget("console", consoleTarget); 
         
        FileTarget fileTarget = new FileTarget(); 
        config.AddTarget("file", fileTarget); 
         
        // Step 3. Set target properties 
         
        consoleTarget.Layout = "${date:format=HH\\:MM\\:ss} ${logger} ${message}"; 
        fileTarget.FileName = "${basedir}/file.txt"; 
        fileTarget.Layout = "${message}"; 
         
        // Step 4. Define rules 
         
        LoggingRule rule1 = new LoggingRule("*", LogLevel.Debug, consoleTarget); 
        config.LoggingRules.Add(rule1); 
 
        LoggingRule rule2 = new LoggingRule("*", LogLevel.Debug, fileTarget); 
        config.LoggingRules.Add(rule2); 
         
        // Step 5. Activate the configuration 
 
        LogManager.Configuration = config; 
         
        // Example usage 
 
        Logger logger = LogManager.GetLogger("Example"); 
        logger.Trace("trace log message"); 
        logger.Debug("debug log message"); 
        logger.Info("info log message"); 
        logger.Warn("warn log message"); 
        logger.Error("error log message"); 
        logger.Fatal("fatal log message"); 
    } 
}

 

 

NLog还能干点儿啥?

NLog supports some more logging scenarios, which couldn't be fully described here. See the links below for more information:

除此之外,NLog还支持一些更加复杂的需要日志记录的场景。限于篇幅,这里无法一一列出,若你对其感兴趣,可以参考如下链接:

转载地址:http://www.cnblogs.com/dflying/archive/2006/12/07/585787.html

分享到:
评论

相关推荐

    Asp.Net Core用NLog记录日志操作方法

    在本篇文章里小编给大家整理的是一篇关于Asp.Net Core用NLog记录日志操作方法以及相关知识点,需要的朋友们可以学习下。

    .net日志组件NLog.zip

    文件文本控制台Email数据库网络中的其它计算机(通过TCP或UDP)基于MSMQ的消息队列Windows系统日志其他形式,请参考http://www.nlog-project.org/targets.html除此之外,每一条跟踪消息都可以自动带有上下文信息...

    ASP.NET Core开发教程之Logging利用NLog写日志文件

    学习Logging 组件的相关使用,使用NLog 将日志写入到文件记录。 Logging 使用 新建一个 ASP.NET Core 项目,为了方便,我选择Web 应用程序,改身份验证 改为 不进行身份验证。 新建好以后,会自动引用好对应的 ...

    NLog插件, .net日志插件

    NLog是一个简单灵活的.NET日志记录类库。通过使用NLog,我们可以在任何一种.NET语言中输出带有上下文的(contextual information)调试诊断信息,根据喜好配置其表现样式之后发送到一个或多个输出目标(target)中。...

    NLog.Extensions.Logging:用于.NET标准库和.NET Core应用程序的Microsoft.Extensions.Logging的NLog提供程序

    如果您不想使用DI,则可以将添加到项目中,手动添加NLog.config文件,按照本进行操作GetCurrentClassLogger() ,然后将其用于日志记录。 要使用DI,可以按照下面的“入门”教程将NLog与Microsoft.Extensions....

    AspNetCoreNlog:ASP.NET Core NLog MS SQL Server PostgreSQL MySQL Elasticsearch

    本文介绍如何在使用NLog登录到Microsoft SQL Server的ASP.NET Core应用程序中设置日志记录。 NLog.Web.AspNetCore Nuget包已添加到csproj文件中的依赖项中。 &lt; TargetFramework&gt;...

    Nlog.RabbitMQ:流行的Nlog日志记录工具的目标

    流行的NLog日志记录工具的RabbitMQ目标 最低推荐配置 &lt;? xml version = " 1.0 " encoding = " utf-8 " ?&gt; &lt; nlog xss=removed xss=removed&gt; &lt; target name = " RabbitMQTarget " xsi :

    NLog作为Microsoft扩展日志记录的日志记录提供程序-C#-PowerShell-下载

    AddNLog()它提供扩展方法以使用或将 NLog 注册为 Microsoft 扩展日志记录的 LoggingProvider UseNLog()。 请注意,如果使用ASP.NET Core,则改为安装NLog.Web.AspNetCore。 NLog.Extensions.Logging还可以从 ...

    .Net Core2.1+NLog+SqlServer+MySql使用实例

    asp.Net Core2.1使用灵活简单的日志记录框架NLog+SqlServer的示例代码!

    Nlog 日志DEMO

    NLog是一个简单灵活的.NET日志记录类库,NLog的API非常类似于log4net,且配置方式非常简单。通过使用NLog,我们可以在任何一种.NET语言中输出带有上下文的调试信息,根据项目需求配置署出格式和输出目标的规则。

    ASP.NET Core与NLog集成的完整步骤

    NLog是一个免费的日志记录框架,专门为.net平台下的框架提供日志功能,下面这篇文章主要给大家介绍了关于ASP.NET Core与NLog集成的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

    NLog:NLog-适用于各种.NET平台的高级结构化日志记录

    NLog是用于.NET的免费日志记录平台,具有丰富的日志路由和管理功能。 无论它的大小或复杂程度如何,都可以轻松为您的应用程序生成和管理高质量的日志。 它可以处理从任何.NET语言发出的诊断消息,使用上下文信息对...

    AutoFac.Extras.NLog.DotNetCore:用于NLog的Autofac日志记录模块。 移植到.NET Core的.NET Standard 2.0

    .NET Core的Autofac NLog日志记录模块 用于NLog的Autofac日志记录模块。 移植到.NET Core的.NET Standard 2.0。 谢谢正在安装用Nuget安装Install-Package AutoFac.Extras.NLog.DotNetCore 或Dotnet CLI dotnet add ...

    NLog-适用于各种.NET平台的高级结构化日志记录-.NET开发

    NLog是用于.NET的免费日志记录平台,具有丰富的日志路由和管理功能。 无论其大小或复杂程度如何,它都可以轻松为您的应用程序生成和管理高质量的日志。 它可以处理NLog是.NET的免费日志记录平台,具有丰富的日志路由...

    .NET Core3.0 日志 logging的实现

    .NET Core3.0内置多种日志记录程序,并且有第三方提供的日志记录程序框架如:log4net,NLog,Serilog,elmah.io等。后面会介绍前三种日志框架如何与.NETcore3.0结合起来进行使用。 内置日志记录提供程序 ASP.NETCore...

    详解.Net Core中的日志组件(Logging)

    Logging组件是微软实现的日志记录组件包括控制台(Console)、调试(Debug)、事件日志(EventLog)和TraceSource,但是没有实现最常用用的文件记录日志功能(可以用其他第三方的如NLog、Log4Net。之前写过NLog使用的文章)...

    详解.net core日记记录

    ASP.NET Core 有内置的log组件,遗憾的是看了微软官方文档,貌似无法直接将日志存于文件或数据库,只能由自己实现或引用第三方日志组件。 以下为Nlog和log4net的使用记录 Nlog使用 搜索添加Nuget包 Nlog Nlog.Web....

    NLog v4.7.11最新版Demo

    NLog是一个简单灵活的.NET日志记录类库,v4.7.11最新稳定版Demo

    .Net项目中NLog的配置和使用实例详解

    当然serilog也是一个不错的日志记录框架哟,不过今天主要还是要讲述的是NLog在项目中的配置和使用。 NLog框架源码:https://github.com/NLog/NLog 一、导入NLog NuGet PackAge: 二、配置NLog 配置文件: 注意:...

Global site tag (gtag.js) - Google Analytics