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

NLog处理异常使用说明书

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

.NLog简要介绍:                                    

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

2.NLogAPI非常类似于log4net,且配置方式非常简单。NLog使用路由表(routing table进行配置,但log4net却使用层次性的appender配置,这样就让NLog的配置文件非常容易阅读,并便于今后维护。

3.NLog遵从BSD license,即允许商业应用且完全开放源代码。任何人都可以免费使用并对其进行测试,然后通过邮件列表反馈问题以及建议。

4.NLog支持.NETC/C++以及COM interop API,因此我们的程序、组件、包括用C++/COM 编写的遗留模块都可以通过同一个路由引擎将信息发送至NLog中。

5.NLog.NET API的过滤信息功能执行效率很高,这样我们就可以一直保留程序中的日志写入代码,然后由NLog在运行时将其根据需要过滤掉。在一个1.6GCPU笔记本电脑上,NLog每秒钟可以过滤掉1.5亿条日志写入语句!加上异步处理(asynchronous processing以及其他包装程序(wrappers的支持,NLog将成为一个极为强大的、且极具伸缩性的日志记录工具.

.NLogLogger类的方法解释:

1.   Trace - 最常见的记录信息,一般用于普通输出

2.   Debug - 同样是记录信息,不过出现的频率要比Trace少一些,一般用来调试程序

3.   Info - 信息类型的消息

4.   Warn - 警告信息,一般用于比较重要的场合

5.   Error - 错误信息

6.   Fatal - 致命异常信息。一般来讲,发生致命异常之后程序将无法继续执行。

 

以下的方法让你决定是否将日志用于特定的等级:

1.IsEnabled()决定日志是否能用于特定的等级.

2.IsTraceEnabled决定日志是否能用于Trace这个等级

3.IsDebugEnabled决定日志是否能用于Debug这个等级

4.IsInfoEnabled决定日志是否能用于Info这个等级

5.IsWarnEnabled决定日志是否能用于Warn这个等级

6.IsErrorEnabled决定日志是否能用于Error这个等级

7.IsFatalEnabled决定日志是否能用于Fatal这个等级

以下是英文原文:

The NLog.Logger class has the following methods. Each method has a number of overloads designed to minimize the number of memory allocations in order to improve logging speed. Click on a method name to see the list of overloads for it.

  • Log() - Writes the diagnostic message at the specified level using the specified format provider and format parameters.
  • Trace() - Writes the diagnostic message at the Trace level using the specified format provider and format parameters.
  • Debug() - Writes the diagnostic message at the Debug level using the specified format provider and format parameters.
  • Info() - Writes the diagnostic message at the Info level using the specified format provider and format parameters.
  • Warn() - Writes the diagnostic message at the Warn level using the specified format provider and format parameters.
  • Error() - Writes the diagnostic message at the Error level using the specified format provider and format parameters.
  • Fatal() - Writes the diagnostic message at the Fatal level using the specified format provider and format parameters.

The following methods and properties let you determine whether logging is enabled for the specified level:

  • IsEnabled() - Determines if logging is enabled for the specified level.
  • IsTraceEnabled - Determines if logging is enabled for the Trace level.
  • IsDebugEnabled - Determines if logging is enabled for the Debug level.
  • IsInfoEnabled - Determines if logging is enabled for the Info level.
  • IsWarnEnabled - Determines if logging is enabled for the Warn level.
  • IsErrorEnabled - Determines if logging is enabled for the Error level.

Full list of members of the Logger class can be found here.

. 配置文件详细配置过程

通过在启动的时候对一些常用目录的扫描,NLog会尝试使用找到的配置信息进行自动的自我配置。当你运行一个独立的*.exe客户端可执行程序时,NLog将在以下目录搜索配置信息:

  1. 标准的程序配置文件(通常为 程序名.exe.config
  2. 程序目录下的程序名.exe.nlog文件
  3. 程序目录下的NLog.config文件
  4. NLog.dll所在目录下的NLog.dll.nlog文件
  5. 如果定义了NLOG_GLOBAL_CONFIG_FILE环境变量,则该变量所指向的文件

如果是一个ASP.NET程序,被搜索的目录包括:

  1. 标准的web程序配置文件web.config
  2. web.config在同一目录下的web.nlog文件
  3. 程序目录下的NLog.config文件
  4. NLog.dll所在目录下的NLog.dll.nlog文件
  5. 如果定义了NLOG_GLOBAL_CONFIG_FILE环境变量,则该变量所指向的文件

由于.NET Compact Framework不支持程序配置文件(*.exe.config)和环境变量,因此NLog将只会扫描这些地方:

  1. 程序目录下的NLog.config文件
  2. NLog.dll所在目录下的NLog.dll.nlog文件
  3. 如果定义了NLOG_GLOBAL_CONFIG_FILE环境变量,则该变量所指向的文件

 

配置文件格式

 NLog支持两种配置文件格式

  1. 配置信息嵌入在.NET应用程序标准的*.exe.config或者web.config文件里
  2. 保存在独立文件里,也叫单一格式

如果你选择了第一种方式,使用的是标准的configSections这种机制,那么你的配置文件看起来差不多是这个样子:

<configuration>

  <configSections>

    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>

  </configSections>

  <nlog>

  </nlog>

</configuration>

单一格式的配置文件就是一个以<nlog />为根节点的纯XMl文件。命名空间并不强制使用,如果使用的话我们就可以利用Visual Studio的智能感应。

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

</nlog>

需要注意的是NLog的配置文件总是大小写敏感的,不管是在使用的时候,或者即使你没有使用名字空间。当然只有你的大小写符合要求,智能感应才能正常工作。

 

配置元素

下面这些元素可以作为<nlog />的字节点。列表中的前两个元素在所有的NLog配置文件中都必须提供,其余的则可以选择使用,通常用于一些复杂场景。

  1. <targets /> - 定义日志的目标/输出
  2. <rules /> - 定义日志的路由规则
  3. <extensions /> - *.dll加载NLog扩展
  4. <include /> - 导入外部配置文件
  5. <variable /> - 为配置变量赋值

 

输出目标

<target />区域定义了日志的目标或者说输出。每一个<target />元素代表一个目标。我们需要为每一个目标设置两个属性:

  1. name - 目标的名称
  2. type - 目标的类型 - 比如“File”“Database”“Mail”。如果你使用了名字空间,这个属性会被命名为 xsi:type.

除了这两个属性,通常来说给目标添加一些其它参数,这些属性将会影响你在程序中如何使用诊断跟踪语句(diagnostic traces)。每一个目标都可以有一组不同的参数集合,并且参数都是上下文相关的,你可以在本项目的主页上找到更多关于参数的详细说明。Visual Studio的智能感应对这些参数同样有用。

举个例子 - “File”目标可以使用“fileName”作为参数来定义输出文件名,而“Console”目标可以借助“error”参数的值来判断是否应该把当前进程的diagnostic traces结果输出到标准错误(stderr)还是标准输出(stdout)控制台。

下面这个例子演示了在<targets />区域同时定义多个目标:两个files目标,一个network目标和一个OutputDebugString目标:

<targets>

  <target name="f1" xsi:type="File" fileName="file1.txt"/>

  <target name="f2" xsi:type="File" fileName="file2.txt"/>

  <target name="n1" xsi:type="Network" address="tcp://localhost:4001"/>

  <target name="ds" xsi:type="OutputDebugString"/>

</targets>

NLog提供了许多已经预先定义好的目标。关于这些目标的详细说明请参考本项目的主页。实际上,你也可以很容易的为自己创建目标 - 全部只需大约15-20行代码即可,更多信息请参考项目文档

 

路由规则

<rules />区域定义了日志的路由规则。实际上它是一个简单的路由表,对每一个日志源/记录者的名称和记录等级的组合,定义了一个日志写入目标列表。 表中的规则是被顺序处理的。每当遇到匹配的规则时,日志信息就会被送到规则中定义的一个或多个目标去。如果一个规则被标识为最后一个,那么其后的规则都不会被执行。

每一个路由表项就是一个<logger />元素,它的可以接受的属性有:

  1. name - 日志源/记录者的名字 (允许使用通配符*)
  2. minlevel - 该规则所匹配日志范围的最低级别
  3. maxlevel - 该规则所匹配日志范围的最高级别
  4. level - 该规则所匹配的单一日志级别
  5. levels - 该规则所匹配的一系列日志级别,由逗号分隔。
  6. writeTo - 规则匹配时日志应该被写入的一系列目标,由逗号分隔。
  7. final - 标记当前规则为最后一个规则。其后的规则即时匹配也不会被运行。

一些例子:

  1. <logger name="Name.Space.Class1" minlevel="Debug" writeTo="f1" /> - 名字空间Name.Space下的Class1这个类的所有级别等于或者高于Debug的日志信息都写入到“f1”这个目标里。
  2. <logger name="Name.Space.Class1" levels="Debug,Error" writeTo="f1" /> -名字空间Name.Space下的Class1这个类的所有级别等于DebugError的日志信息都写入到“f1”这个目标里。
  3. <logger name="Name.Space.*" writeTo="f3,f4" /> -名字空间Name.Space下所有类的所有级别的日志信息都写入到“f3”“f4”这两个目标里。
  4. <logger name="Name.Space.*" minlevel="Debug" maxlevel="Error" final="true" /> - 名字空间Name.Space下所有类的、级别在DebugError之间的(包括Debug,Info,Warn,Error) 日志信息都不会被记录(因为这条规则没有定义writeTo),同时其它后续规则也都会被忽略(因为这里设置了final="true")

最简单的情况下,整个日志的配置信息可以只由一个<target />元素和一个<logger />规则构成,就可以吧一定级别的日志信息路由到期望的目标去。随着程序不断的变大,增加新的目标和规则也很简单。

 

上下文信息

布局由被一个美元符号$加左大括弧“${”和一个右大括弧“}”为标记所包围的文本所组成。这个标记也就是所谓的布局生成器(layout renderers),我们可以用它来把一些上下文相关的信息插入到日志信息中。布局可以应用在许多地方,比如可以被用在控制输出到屏幕或写入文件信息的格式,也可以用在控制文件名。接下来我们会更多的了解布局的强大。

假设我们希望每个输出到控制台的信息都包含一些这些信息:

·         当前的日期和时间

·         产生日志信息的类和方法的名字

·         日志等级

·         日志内容

利用Layout来实现很简单:

<target name="c" xsi:type="Console"

  layout="${longdate} ${callsite} ${level} ${message}"/>

或者我们可以把每一个日志记录者生成的日志信息输出到一个单独的文件里:

<target name="f" xsi:type="File" fileName="${logger}.txt"/>

这里我们看到fileName属性的值被设置为布局生成器${logger},从而使每一条日志信息被写到一个以日志生成者名字命名的一个文件里。上面这个例子将生成如下一系列文件:

·         Name.Space.Class1.txt

·         Name.Space.Class2.txt

·         Name.Space.Class3.txt

·         Other.Name.Space.Class1.txt

·         Other.Name.Space.Class2.txt

·         Other.Name.Space.Class3.txt

·         ...

有一个常见需求是能够用日期信息来区分日志文件。如果使用${shortdate}布局生成器,这简直太容易了:

<target name="f" xsi:type="File" fileName="${shortdate}.txt"/>

那么可以给每一个职员生成一个日志文件吗?答案就是${windows-identity}布局生成器:

<target name="f" xsi:type="File" fileName="${windows-identity:domain=false}.txt"/>

这样我们就能够给每一个职员生成一个日志文件了:

  1. Administrator.txt
  2. MaryManager.txt
  3. EdwardEmployee.txt
  4. ...

更复杂的场景也能做到。下面这个例子说明了如何为每个人每天生成一个日志文件。每天的日志文件存放在不同的文件夹里:

<target name="f" xsi:type="File"

background: white; margin: 0cm 0cm

分享到:
评论

相关推荐

    NLog处理异常详细文档

    以下是对NLog处理异常的详细讲解: 1. **异常处理**:NLog的核心功能之一就是捕获和记录程序中的异常。当应用程序抛出异常时,NLog可以捕获这些异常,并按照预先设定的日志级别(如Error、Fatal)将其记录下来,这...

    全局异常捕获&NLOG使用配置示例

    在WPF应用中,我们可以利用Dispatcher.UnhandledException事件来捕获UI线程上的未处理异常。这个事件会在UI线程上抛出未处理异常时触发。以下是一个简单的示例: ```csharp Application.Current.Dispatcher....

    Nlog的使用测试

    除了基本的日志记录,NLog还支持更高级的功能,如自定义布局、过滤器、异步处理、日志性能跟踪等。例如,你可以自定义日志输出格式,添加时间戳、线程ID等信息: ```xml [%thread] %-5level %logger - %message%...

    NLog记录日志、发邮件、写入数据库

    NLog还具有许多其他高级特性,如日志过滤、日志格式化、异步处理、性能监控等。通过自定义布局(Layouts)和布局渲染器(Layout Renderers),可以控制日志输出的格式和内容,如添加时间戳、线程ID、类名等信息。 ...

    C# Nlog日志使用并发送邮件

    要开始使用Nlog,首先需要在项目中引入Nlog库。这可以通过NuGet包管理器来完成,搜索"Nlog"并安装相应的包。接着,创建一个名为"Nlog.config"的XML配置文件,配置日志的目标和规则。例如,你可以设置一个文件目标...

    C# WinForm NLog

    NLog 的简单使用 \bin\Debug\Logs\yyyy-MM-dd.log 每日一个文件 ,文件最大为1000k 超过1000k 存档到\bin\Debug\Logs\archives\yyyy-MM-dd#编号.log

    C#使用NLog记录日志的案例程序

    2、案例的主要目的是为了演示如何使用NLog的通用类库,实现日志的记录功能 3、可以通过这个Demo做基础,或兼容或开发,进行C#的程序开发,可以直接使用NLog的日志功能 二、使用NLog的好处 1、NLog日志配置灵活:NLog...

    NLog v4.7.11最新版Demo

    8. **异常处理**:可以捕获和记录异常信息,方便问题排查。 9. **嵌入式资源**:日志配置文件可以直接嵌入到应用程序中,便于部署和更新。 10. **跨平台**:NLog支持.NET Framework、.NET Core和.NET Standard,可以...

    C# Nlog 日志记录 学习

    本教程聚焦于使用C#与NLog进行日志管理,特别针对.NET Framework 4.0环境。NLog是一款强大的、可配置的日志记录库,适用于各种.NET应用程序。 首先,让我们深入了解NLog的基本概念。NLog提供了一个灵活的配置系统,...

    dotnet-NLog高级的NETSilverlight和Xamarin日志处理

    在处理大型系统或分布式环境时,NLog的集中式日志管理和监控工具如Logstash、Graylog或Elasticsearch的集成变得尤为重要。这些工具可以帮助收集、解析和分析来自不同源的日志数据,以便进行故障排查和性能监控。 总...

    DotNetCore-Nlog

    `NLog.Web.AspNetCore` 包是专门为 ASP.NET Core 应用设计的,它包含了必要的适配器和中间件,使 ASP.NET Core 的日志事件能够被 NLog 正确地捕获和处理。 标签 "Nlog" 强调了讨论的核心技术,即 NLog 日志框架。...

    NLog使用帮助.chm

    NLog使用帮助.chm

    NLog最新版VS2010可用

    NLog不仅记录日志,还能处理未捕获的全局异常,确保在程序出错时仍能记录关键信息,便于后期排查问题。 总之,NLog是.NET开发中的一个强大工具,无论是在小型项目还是大型企业级应用中,都能提供可靠和灵活的日志...

    asp.net core 使用NLog打印日志到txt文件

    在代码中,你可以使用`ILogger`接口记录日志,NLog会根据配置自动处理输出: ```csharp private readonly ILogger _logger; public MyClass(ILogger&lt;MyClass&gt; logger) { _logger = logger; } public void ...

    NLOG 日志开源组件 visual studio

    在实际使用中,开发者通常会在Visual Studio中创建一个NLOG配置文件(如nlog.config),然后在代码中通过`NLog.Logger`实例来调用`Trace`, `Debug`, `Info`, `Warn`, `Error`, `Fatal`等方法记录日志。例如: ```...

    NLog demo,文档

    在实际应用中,NLog还提供了异常处理、性能监控、异步记录、日志分割和归档等功能。其灵活性和可扩展性使得它成为.NET开发中的首选日志记录工具。 综上所述,NLog是一个功能强大且高度可定制的日志框架,它简化了C#...

    Nlog封装帮助方法类

    Nlog封装帮助方法类,方便调用

    基于Autofac的Nlog扩展

    NLog是一款广泛使用的日志记录框架,而Autofac则是一种流行的依赖注入(DI)容器。当这两者结合时,可以实现更加灵活和高效的日志管理。本文将详细探讨“基于Autofac的Nlog扩展”,如何实现Nlog的自动注入,以及如何...

    NLog123.rar

    在本文中,我们将深入探讨如何在C# WinForm应用程序中使用NLog进行日志记录,这对于初学者来说是一个非常实用的技能。Visual Studio 2019是我们的开发环境,NLog作为强大的日志框架,将帮助我们实现灵活且可扩展的...

    NLog上传DLL

    NLog是一个广泛使用的.NET日志框架,它提供了灵活的日志配置和多种日志目标,如文件、数据库、SMTP邮件等。本文将详细讲解如何在C#项目中添加和使用NLog的DLL及配置文件。 首先,我们需要理解“DLL”是什么。DLL...

Global site tag (gtag.js) - Google Analytics