- 浏览: 671379 次
- 性别:
- 来自: 石家庄
文章分类
最新评论
-
abao1:
老贾 在安装IDEA的过程中,在激活步骤时,按如下操作即可: ...
IntelliJ IDEA 2016注册方法和注册码 -
bo_hai:
./usr/bin/java: symbol lookup ...
jmagick安装步骤 -
wxcking:
不错的, 收藏一下
JAVA使用POI生成Excel文件 -
zgyfh:
大哥,密码是多少啊?zgyfh@tom.com谢谢了!新手学习 ...
WPF做的必备示例 -
记忆无泪:
jiasongmao 写道你的邮箱是多少,我可以发源代码到邮箱 ...
WPF做的必备示例
一.NLog简要介绍:
1.NLog是一个简单灵活的.NET日志记录类库。通过使用NLog,我们可以在任何一种.NET语言中输出带有上下文的(contextual information)调试诊断信息,根据喜好配置其表现样式之后发送到一个或多个输出目标(target)中。
2.NLog的API非常类似于log4net,且配置方式非常简单。NLog使用路由表(routing table)进行配置,但log4net却使用层次性的appender配置,这样就让NLog的配置文件非常容易阅读,并便于今后维护。
3.NLog遵从BSD license,即允许商业应用且完全开放源代码。任何人都可以免费使用并对其进行测试,然后通过邮件列表反馈问题以及建议。
4.NLog支持.NET、C/C++以及COM interop API,因此我们的程序、组件、包括用C++/COM 编写的遗留模块都可以通过同一个路由引擎将信息发送至NLog中。
5.NLog的.NET API的过滤信息功能执行效率很高,这样我们就可以一直保留程序中的日志写入代码,然后由NLog在运行时将其根据需要过滤掉。在一个1.6G单CPU笔记本电脑上,NLog每秒钟可以过滤掉1.5亿条日志写入语句!加上异步处理(asynchronous processing)以及其他包装程序(wrappers)的支持,NLog将成为一个极为强大的、且极具伸缩性的日志记录工具.
二.NLog中Logger类的方法解释:
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将在以下目录搜索配置信息:
- 标准的程序配置文件(通常为 程序名.exe.config)
- 程序目录下的程序名.exe.nlog文件
- 程序目录下的NLog.config文件
- NLog.dll所在目录下的NLog.dll.nlog文件
- 如果定义了NLOG_GLOBAL_CONFIG_FILE环境变量,则该变量所指向的文件
如果是一个ASP.NET程序,被搜索的目录包括:
- 标准的web程序配置文件web.config
- 和web.config在同一目录下的web.nlog文件
- 程序目录下的NLog.config文件
- NLog.dll所在目录下的NLog.dll.nlog文件
- 如果定义了NLOG_GLOBAL_CONFIG_FILE环境变量,则该变量所指向的文件
由于.NET Compact Framework不支持程序配置文件(*.exe.config)和环境变量,因此NLog将只会扫描这些地方:
- 程序目录下的NLog.config文件
- NLog.dll所在目录下的NLog.dll.nlog文件
- 如果定义了NLOG_GLOBAL_CONFIG_FILE环境变量,则该变量所指向的文件
配置文件格式
NLog支持两种配置文件格式
- 配置信息嵌入在.NET应用程序标准的*.exe.config或者web.config文件里
- 保存在独立文件里,也叫单一格式
如果你选择了第一种方式,使用的是标准的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配置文件中都必须提供,其余的则可以选择使用,通常用于一些复杂场景。
- <targets /> - 定义日志的目标/输出
- <rules /> - 定义日志的路由规则
- <extensions /> - 从*.dll加载NLog扩展
- <include /> - 导入外部配置文件
- <variable /> - 为配置变量赋值
输出目标
<target />区域定义了日志的目标或者说输出。每一个<target />元素代表一个目标。我们需要为每一个目标设置两个属性:
- name - 目标的名称
- 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 />元素,它的可以接受的属性有:
- name - 日志源/记录者的名字 (允许使用通配符*)
- minlevel - 该规则所匹配日志范围的最低级别
- maxlevel - 该规则所匹配日志范围的最高级别
- level - 该规则所匹配的单一日志级别
- levels - 该规则所匹配的一系列日志级别,由逗号分隔。
- writeTo - 规则匹配时日志应该被写入的一系列目标,由逗号分隔。
- final - 标记当前规则为最后一个规则。其后的规则即时匹配也不会被运行。
一些例子:
- <logger name="Name.Space.Class1" minlevel="Debug" writeTo="f1" /> - 名字空间Name.Space下的Class1这个类的所有级别等于或者高于Debug的日志信息都写入到“f1”这个目标里。
- <logger name="Name.Space.Class1" levels="Debug,Error" writeTo="f1" /> -名字空间Name.Space下的Class1这个类的所有级别等于Debug或Error的日志信息都写入到“f1”这个目标里。
- <logger name="Name.Space.*" writeTo="f3,f4" /> -名字空间Name.Space下所有类的所有级别的日志信息都写入到“f3”和“f4”这两个目标里。
- <logger name="Name.Space.*" minlevel="Debug" maxlevel="Error" final="true" /> - 名字空间Name.Space下所有类的、级别在Debug和Error之间的(包括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"/>
这样我们就能够给每一个职员生成一个日志文件了:
- Administrator.txt
- MaryManager.txt
- EdwardEmployee.txt
- ...
更复杂的场景也能做到。下面这个例子说明了如何为每个人每天生成一个日志文件。每天的日志文件存放在不同的文件夹里:
<target name="f" xsi:type="File"
background: white; margin: 0cm 0cm
发表评论
-
美了哭了,AduSkin是我见过最好看的WPF控件库
2020-03-14 19:58 677原文地址:https://www.pianshen.com/ ... -
使用NSSM把.Net Core部署至 Windows 服务
2019-10-16 08:52 545转自:https://www.cnblogs.com/emr ... -
玩转ASP.NET Core中的日志组件
2019-01-06 16:11 704转自:https://www.cnblogs.com/ ... -
CentOS 7 部署 ASP.NET Core 应用程序
2019-01-04 13:56 510CentOS 7 部署 ASP.NET Core 应用程序 ... -
GeckoWebBrowser实现自定义打印
2018-12-22 00:26 792nsIWebBrowserPrint print ... -
Winform桌面程序如何使用Geckofx45
2018-12-05 14:50 2376NuGet管理GeckoFx PM> Inst ... -
NLog的介绍使用
2018-09-28 17:36 1089NLog是什么 NLog是一个基于.NET平台编写的类库, ... -
常用的.net开源项目
2018-09-28 17:01 461常用 Json.NET:Json.Net ... -
高效实用的.NET开源项目
2018-09-28 16:58 4871.Akka.NET: 概述:更轻松地构建强大的并发 ... -
OCR框架整理
2017-08-16 09:29 582泰比ABBYY OCR SDK开发包 Asp ... -
使用Aspose.word导出word报告
2017-04-09 11:49 1645最近在做一个.net项目需要实现网站导出word报告功能,最 ... -
利用Aspose.Words 完美生成word试卷
2017-04-09 11:43 5301aspose.word生成word文档 public cl ... -
java使用wsimport生成服务代码时报错的解决办法
2017-01-18 11:27 1702今天遇到了WebService的问题:在使用jdk命令wsi ... -
OCR文字识别系统
2016-12-21 22:14 454慧视OCR文字识别系统 增值税专用发票扫描识别系统 ... -
asprise-ocr:验证码识别
2016-12-21 22:17 769asprise-ocr http://asprise ... -
jieba中文分词的.NET版本:jieba.NET
2015-09-10 09:36 807转自:http://www.cnblogs.com/ande ... -
通用身份验证类:AuthenticationCookie
2015-09-06 09:00 726/// <summary> /// C ... -
KwCombinatorics排列组合类库
2015-08-06 17:34 615KwCombinatorics类库的主页是:http: ... -
CefSharp嵌入式浏览器
2015-08-06 15:21 1054日常开发中,我们需要将一些Web页面嵌入到桌面客户端软件中。 ... -
C#开源框架(整理)
2015-07-27 09:32 2356http://www.cnblogs.com/c ...
相关推荐
以下是对NLog处理异常的详细讲解: 1. **异常处理**:NLog的核心功能之一就是捕获和记录程序中的异常。当应用程序抛出异常时,NLog可以捕获这些异常,并按照预先设定的日志级别(如Error、Fatal)将其记录下来,这...
在WPF应用中,我们可以利用Dispatcher.UnhandledException事件来捕获UI线程上的未处理异常。这个事件会在UI线程上抛出未处理异常时触发。以下是一个简单的示例: ```csharp Application.Current.Dispatcher....
除了基本的日志记录,NLog还支持更高级的功能,如自定义布局、过滤器、异步处理、日志性能跟踪等。例如,你可以自定义日志输出格式,添加时间戳、线程ID等信息: ```xml [%thread] %-5level %logger - %message%...
NLog还具有许多其他高级特性,如日志过滤、日志格式化、异步处理、性能监控等。通过自定义布局(Layouts)和布局渲染器(Layout Renderers),可以控制日志输出的格式和内容,如添加时间戳、线程ID、类名等信息。 ...
要开始使用Nlog,首先需要在项目中引入Nlog库。这可以通过NuGet包管理器来完成,搜索"Nlog"并安装相应的包。接着,创建一个名为"Nlog.config"的XML配置文件,配置日志的目标和规则。例如,你可以设置一个文件目标...
NLog 的简单使用 \bin\Debug\Logs\yyyy-MM-dd.log 每日一个文件 ,文件最大为1000k 超过1000k 存档到\bin\Debug\Logs\archives\yyyy-MM-dd#编号.log
2、案例的主要目的是为了演示如何使用NLog的通用类库,实现日志的记录功能 3、可以通过这个Demo做基础,或兼容或开发,进行C#的程序开发,可以直接使用NLog的日志功能 二、使用NLog的好处 1、NLog日志配置灵活:NLog...
8. **异常处理**:可以捕获和记录异常信息,方便问题排查。 9. **嵌入式资源**:日志配置文件可以直接嵌入到应用程序中,便于部署和更新。 10. **跨平台**:NLog支持.NET Framework、.NET Core和.NET Standard,可以...
本教程聚焦于使用C#与NLog进行日志管理,特别针对.NET Framework 4.0环境。NLog是一款强大的、可配置的日志记录库,适用于各种.NET应用程序。 首先,让我们深入了解NLog的基本概念。NLog提供了一个灵活的配置系统,...
在处理大型系统或分布式环境时,NLog的集中式日志管理和监控工具如Logstash、Graylog或Elasticsearch的集成变得尤为重要。这些工具可以帮助收集、解析和分析来自不同源的日志数据,以便进行故障排查和性能监控。 总...
`NLog.Web.AspNetCore` 包是专门为 ASP.NET Core 应用设计的,它包含了必要的适配器和中间件,使 ASP.NET Core 的日志事件能够被 NLog 正确地捕获和处理。 标签 "Nlog" 强调了讨论的核心技术,即 NLog 日志框架。...
NLog使用帮助.chm
NLog不仅记录日志,还能处理未捕获的全局异常,确保在程序出错时仍能记录关键信息,便于后期排查问题。 总之,NLog是.NET开发中的一个强大工具,无论是在小型项目还是大型企业级应用中,都能提供可靠和灵活的日志...
在代码中,你可以使用`ILogger`接口记录日志,NLog会根据配置自动处理输出: ```csharp private readonly ILogger _logger; public MyClass(ILogger<MyClass> logger) { _logger = logger; } public void ...
在实际使用中,开发者通常会在Visual Studio中创建一个NLOG配置文件(如nlog.config),然后在代码中通过`NLog.Logger`实例来调用`Trace`, `Debug`, `Info`, `Warn`, `Error`, `Fatal`等方法记录日志。例如: ```...
在实际应用中,NLog还提供了异常处理、性能监控、异步记录、日志分割和归档等功能。其灵活性和可扩展性使得它成为.NET开发中的首选日志记录工具。 综上所述,NLog是一个功能强大且高度可定制的日志框架,它简化了C#...
Nlog封装帮助方法类,方便调用
NLog是一款广泛使用的日志记录框架,而Autofac则是一种流行的依赖注入(DI)容器。当这两者结合时,可以实现更加灵活和高效的日志管理。本文将详细探讨“基于Autofac的Nlog扩展”,如何实现Nlog的自动注入,以及如何...
在本文中,我们将深入探讨如何在C# WinForm应用程序中使用NLog进行日志记录,这对于初学者来说是一个非常实用的技能。Visual Studio 2019是我们的开发环境,NLog作为强大的日志框架,将帮助我们实现灵活且可扩展的...
NLog是一个广泛使用的.NET日志框架,它提供了灵活的日志配置和多种日志目标,如文件、数据库、SMTP邮件等。本文将详细讲解如何在C#项目中添加和使用NLog的DLL及配置文件。 首先,我们需要理解“DLL”是什么。DLL...