3359 www.cn blogs.com/fuchongjundream/p/3936431.html
1配置文件位置)。
通过在启动时扫描几个常见目录,NLog将使用检测到的配置信息自动尝试自行配置。
1.1单独的*.exe客户端
在的单独客户端上,NLog会在以下目录中搜索配置信息:
标准程序配置文件。 通常是程序名称. exe.config )
程序目录下的程序名称. exe.nlog文件
程序目录下的NLog.config文件
NLog.dll所在目录下的NLog.dll.Nlog文件(如果nlog未导入GAC )
1.2 ASP.NET程序
要在ASP.NET项目中搜索的目录如下:
的标准web程序配置文件web.config
与web.config位于同一目录中的web.nlog文件
程序目录下的NLog.config文件
NLog.dll所在目录下的NLog.dll.Nlog文件(如果nlog未导入GAC )
NLOG_GLOBAL_CONFIG_FILE该变量指向的文件(如果定义了环境变量)
1.2硬件设备库(.NET Compact Framework ) )。
. NET Compact Framework不支持程序配置文件*.exe.config和环境变量,因此NLog只扫描这些位置。
程序目录下的NLog.config文件
NLog.dll所在目录下的NLog.dll.Nlog文件(如果nlog未导入GAC )
1.4总结
从上面看,不管怎么说,我们都将配置文件命名为NLog.config,放在APP的目录下,一定可以扫描。
2配置文件格式)。
2.1 NLog支持两种配置文件格式
配置信息嵌入在. net APP应用程序标准的*.exe.config或web.config文件中
保存到独立的文件
第一个是使用configSections的一般配置
在第二种情况下,对于其他Xml文件,必须按以下方式配置:
注意,根节点的两个命名空间是可选的,但为了智能传感,请将其写入。
2.1子元素配置
defineslogtargets/outputs,声明目标
defineslogroutingrules,声明规则
loadsnlogextensionsfromthe *.dll file加载dll扩展(其实不知道,没用过) ) ) ) ) )。
includesexternalconfigurationfile包含外部配置文件
setsthevalueofaconfigurationvariable为配置变量赋值
另外,前两个要素,也就是targets和rules是必须的配置,剩下的是可选的,应该用于更复杂的配置,我个人没有用过还给你。
3输出目标)。
4路由规则(Rules ) )
区域定义日志的路由规则。 路由表中的每个条目都是一个元素。 这些属性包括:
name -日志的来源/记录者的姓名(允许使用通配符() ) ) ) ) ) ) ) ) ) ) ) ) )。
minlevel -规则匹配的日志范围的最低级别
最大级别-符合规则的日志范围的顶级
level -规则匹配的单个日志级别
levels -规则匹配的一组日志级别。 用逗号隔开。
写入到-在规则匹配时写入日志的一组目标。 用逗号隔开。
final -将当前规则标记为最后一个规则。 之后的规则即使立即一致也不会执行。
例如:
-命名空间Name.Space下名为Class1的类的所有级别都等于或大于调试的日志信息将写入名为“f1”的目标。
-命名空间Name.Space下名为Class1的类的所有级别都等于Debug或Error的日志信息将写入名为" f1 "的目标。
-命名空间Name.Space下所有类的所有级别的日志信息都会写入两个目标: f3和f4。
-不会记录命名空间Name.Space下的所有类、级别介于Debug和Error之间的日志信息(包括Debug、Info、Warn和Error ),因为此规则没有定义writeTo
5上下文布局信息(Layouts and layout renderer
s)NLog最强大的功能之一就是使用布局(layouts)的能力。语法为:“${属性}”为标记所包围的文本所组成。这个标记也就是所谓的“布局生成器(layout renderers),我们可以用它来把一些上下文相关的信息插入到日志信息中。布局可以应用在许多地方,比如可以被用在控制输出到屏幕或写入文件信息的格式,也可以用在控制文件名。
假设我们希望每个输出到控制台的信息都包含一些这些信息:
当前的日期和时间
产生日志信息的类和方法的名字
日志等级
日志内容
利用Layout来实现很简单:,前面已经提到过:
使用Layout控制输出的文件名:
使用日期来区分日志文件。如果使用${shortdate}布局生成器:
更多的布局生成器参考官方文档:
6 包含配置文件(Include files)
我们有这样的需求,不想让NLog.cofige文件太大,太多,读起来太累,我们可以把它分割下。如何分割成若干小的config呢?使用include简单完成。
...
...
制定了要包含的config小文件位置就行。
7 变量(Variables)
配置文件中也可以定义变量,直接上例子,很明了:
//声明语法
8 自动再配置(Automatic reconfiguration)
听起来确实挺不好理解的。但是确实也没什么。换句简单的话来说,当我们一旦启动程序,这时候NLog.config文件被读取后,知道程序再启动都不会再读取配置文件了。假如我们不想停掉程序,比如说服务器哪能说停就停哈。这就用上这个配置了,这个配置功能是,一旦你对配置文件修改,程序将会重新读取配置文件,也就是自动再配置。直接上代码:
...
9 日志排错(Troubleshooting logging)
程序没问题了,日志却出了问题。这个该怎么办,到底是哪里不正确了?假如日志本身除了bug该如何解决?这就需要日志排错。把日志的错误信息写入日志。
- 设置internalLogFile属性可以让NLog把内部的调试和异常信息都写入指定文件里。
- 决定内部日志的级别,级别越高,输出的日志信息越简洁。
- 是否把内部日志输出到标准控制台。
- 是否把内部日志输出到标准错误控制台 (stderr)。
设置throwExceptions属性为“true”可以让NLog不再阻挡这类异常,而是把它们抛给调用者。在部署是这样做可以帮我们快速定位问题。一旦应用程序已经正确配置了,我们建议把throwExceptions的值设为“false”,这样由于日志引发的问题不至于导致应用程序的崩溃。
10、异步处理(Asynchronous processing )
原理也不多说,直接上代码,使其具备异步处理能力。
11 缺省封装(Default wrappers)
我们希望用同一种封装来处理所有的目标,比如说增加缓冲和/或自动重试功能。
NLog为此提供了专门的语法:。你只要把这个元素放在区域里,然后所有的目标都会自动加载同一个封装目标。需要注意的是只对当前这个区域有效,而你可以使用多个区域,这样你就可以把目标分组并用不同的封装目标处理。
上面的例子里我们定义了两个缓冲文件目标和三个异步以及自动重试网络目标。
12 缺省目标参数(Default target parameters)
其实缺省就是把分散的统一在一个区域来定义,仅仅是个语法糖问题,缺省参数自然是把参数相同的抽象出来放到一个区域,统一定义罢了。下面代码是等价的。
https://nlog-project.org/
https://github.com/adolya/Nlog.RabbitMQ/blob/master/src/Nlog.RabbitMQ.Example/Nlog.config
https://github.com/NLog/NLog/pulls