转:NLog之:文件类型目标(File target)
转:http://www.cnblogs.com/RitchieChen/archive/2012/07/16/2594308.html
英文原文[http://nlog-project.org/wiki/File_target]
用途
将日志信息写到一个或多个文件中。
支持.NET Framework1.0; 1.1; 2.0; 3.5; 4.0 SilverLight4.0 .NET Compact Framework1.0; 2.0; 3.5; Mono.NET.
配置语法
<targets>
<target xsi:type="File"
name="String"
layout="Layout"
header="Layout"
footer="Layout"
encoding="Encoding"
lineEnding="Enum"
archiveAboveSize="Long"
maxArchiveFiles="Integer"
archiveFileName="Layout"
archiveNumbering="Enum"
archiveEvery="Enum"
replaceFileContentsOnEachWrite="Boolean"
fileAttributes="Enum"
fileName="Layout"
deleteOldFileOnStartup="Boolean"
enableFileDelete="Boolean"
createDirs="Boolean"
concurrentWrites="Boolean"
openFileCacheTimeout="Integer"
openFileCacheSize="Integer"
networkWrites="Boolean"
concurrentWriteAttemptDelay="Integer"
concurrentWriteAttempts="Integer"
bufferSize="Integer"
autoFlush="Boolean"
keepFileOpen="Boolean" />
</targets>
更多配置文件使用方法。
参数
常规选项
name – target节点名称
布局选项
layout – 日志呈现的文本内容。默认为:
${longdate}|${level:uppercase=true}|${logger}|${message}
header – 日志头显示的文本内容。
footer – 日志尾显示的文本内容。
encoding – 文件编码方式。
lineEnding – 行结束模式。
可选值:
- CR – 在每尾部插入回车符号(ASCII 13)。
- CRLF – 在每行尾部插入回车和换行符号(ASCII 13 & ASCII 10)。
- Default – 在每行尾部插入平台相关的行结束符号(默认)。
- LF - 在每行尾部插入换行符号(ASCII 10)。
- None – 不插入任何行结束符号。
文件存档选项
archiveAboveSize – 存档上限值。当日志文件大于此值是,将自动存档。其类型为Long。
注意:在多进程并发记录日志的情况下,启用该选项可能会大幅降低日志记录速度。在单进程时,为了达到最佳性能,可以考虑设置ConcurrentWrites为false。
maxArchiveFiles – 保存的最大存档文件数。其类型类Integer,默认为9个。
archiveFileName – 存档文件名称。允许使用Layout。
备注:此文件名称中可能包含特殊占位符{#####},它将根据存档策略,由一个数字序列替代,其中占位符的个数决定了文件名称中的数字。
archiveNumbering – 存档文件的编号方式。
可选值:
Rolling – 滚动式编号,即最新的日志文件编号为0,然后是1,… ,N。
- Sequence – 序列式编号,即最大编号的日志文件为最新的日志文件。
archiveEvery – 是否在每个设定时间刻自动存档日志文件。
可选值:
- Day – 每日存档。
- Hour – 每小时存档。
- Minute – 每分钟存档。
- Month – 每月存档。
- None – 不按时间固定存档。
- Year – 每年存档。
备注:作为写日志的一部分,文件移动到存档位置的操作发生的时间变换时刻。例如,当前时间从10点变至11点,则当在写第11点或11点之后的第一个写操作时,触发日志文件归 档。
注意:在多进程并发记录日志的情况下,启用该选项可能会大幅降低日志记录速度。在单进程时,为了达到最佳性能,可以考虑设置ConcurrentWrites为false。
输出选项
replaceFileContentsOnEachWrite – 是否覆盖每次写入的日志内容,而不是在文件后面追加。其取值类型为Boolean,默认为false。
fileAttributes – 文件属性(只支持Windows)。
可选值:
Archive – 归档文件。
Compressed – 此文件是压缩文件。
DeleteOnClose – 文件关闭后删除。
Device – 设备文件(MSDN中为:保留供将来使用)。
Encrypted – 加密文件。
Hidden – 隐藏文件。
NoBuffering –文件打开时不使用系统缓存 。
Normal - 文件正常,没有设置其他的特性。
NotContentIndexed – 将不会通过操作系统的内容索引服务来索引此文件。
PosixSemantics – 按照POSIX规则存取的文件。
ReadOnly – 只读。
ReparsePoint – 重(新)分析点[1]。
SparseFile – 稀疏文件。
System – 系统文件。
Temporary – 临时文件(尽可能的保存在缓存中,但是不会写入磁盘)。
WriteThrough – 系统通过任何中间缓存后再直接写入磁盘中。
此参数在以下平台中不支持:
NLog v1.0 for .NET Compact Framework 1.0
NLog v1.0 for .NET Compact Framework 2.0
NLog v2.0 for .NET Compact Framework 2.0
NLog v2.0 for .NET Compact Framework 3.5
NLog v2.0 for Silverlight 4.0
filename – 写入日志的文件名称。支持Layout。
备注:文件名字符串中可能包含布局呈现器中的实例变量。这样可以通过配置单个目标节点,而将日志写入多个文件中。
以下fileName属性值将使得NLog在应用程序启动目录下,根据日志级别不同,将日志信息写到不同的文件中。
${basedir}/${level}.log
因此,所有的Debug级别日志写入到Debug.log文件中,所有的Info级别日志写入到Info.log文件中,其它以此类推。同时,也可以结合其它布局呈现器实例,组成所要的日志文件名称。
deleteOldFileOnStartUp – 启动时,是否删除旧的日志文件。其取值类型为Boolean,默认为false。
备注:此选项,仅在“fileName”参数为单个文件时有效。
enableFileDelete – 是否允许删除日志文件。其取值类型为Boolean,默认为true。
createDirs – 是否允许自动创建(不存在的)目录。其取值类型为Boolean,默认为true。
备注:设置此属性为false或许会对性能有那么一丁点的改善,但是如果目录不存在,则会在试图写入日志时报错。
性能优化选项
concurrentWirtes – 是否允许使用通过多个进程的方式,将日志信息并行写入文件中。其取值类型为Boolean,默认为true。
备注:这使得多进程记录日志成为可能。NLog使用一种特别的技术使用文件保持打开状态以备写入。
openFileCacheTimeout – 文件保持打开状态的最大时间秒数。如果这个数字为负数,则在一定不活动时间后,文件不会自动关闭。其取值类型为Integer,默认值为-1。(即默 认状态下文件始终处于打开状态以备写入。)
openFileCacheSize – 保持打开状态的文件数量。当通过设置单个文件类型目标,且结果写入多个不同文件(如根据日志等级或日志对象名称)时,则可将此属性设置为一个较 高的值以改善性能。其取值类型为Integer,默认值为5。
备注:这些文件是在最近最少使用算法基础管理的,此算法在缓存空间不足时将最长时间内没有使用的文件Flush。一般来说,不应当把此参数设置过大,最好不要超过10-15,这是因同时保持多个文件处于打开状态,对系统资源来说是一个很大的消耗。
networkWrites – 是否通过多线程由不同的网络主机并行向文件中写入日志。其取值类型为Boolean,默认值为false。
备注:通过此此种方式,可以有效阻止文件长期保存为打开状态。
concurrentWriteAttemptDelay – 在再次尝试将日志写入文件之前延迟的毫秒数。其取值类型为Integer,默认值为1。
备注:实际的延迟时间,是一个介于0到指定参数值之间的随机整数,且在每次尝试失败之后,都会将此参数加倍。假使此参数值为10,则第一次重试写入 的延迟时间(毫秒数)在 0-10之间的一个随机数,第二次重试时为0-20之间的一个随机数,第三次重试时为0-40之间的一个随机数,第四次重试时为0-80之间的一个随机数 等等,以此类推。
concurrentWriteAttempts – 在NLog丢弃日志信息之前的追加(尝试重写)写次数。其取值类型为Integer,默认值为10。
bufferSize – 日志文件缓存区大小(单位:字节)。其取值类型为Integer,默认值为32768(32KB)。
autoFlush – 在每次日志信息后,是否自动刷新文件缓存区。其取值类型为Boolean,默认值为true。
keepFileOpen – 是否保持日志文件处于打开状态,以代替其在每次日志写事件发生时频繁打开和关闭。其取值类型为Boolean,默认值为false。
备注:设置此属性为true,有助于提高性能。
配置示例
简单日志记录
下面是一个非常简单的文件类型目标示例,它将生成单个日志文件,为此需要将以下代码放到NLog.config此类的配置文件中,程序日志将被写入到应用程序目录下的logs/logfile.txt文件中。
<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="file" xsi:type="File"
layout="${longdate} ${logger} ${message}"
fileName="${basedir}/logs/logfile.txt"
keepFileOpen="false"
encoding="iso-8859-2" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="file" />
</rules>
</nlog>
分级别日志记录文件
单个文件类型目标也可以将日志写入多个文件中,下面的配置将促使每个级别的日志信息写入单独的文件中,因此你将看到有以下文件:
Trace.log
Debug.log
Info.log
Warn.log
Error.log
Fatal.log
<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="file" xsi:type="File"
layout="${longdate} ${logger} ${message}"
fileName="${basedir}/${level}.log" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="file" />
</rules>
</nlog>
每天生成一个日志文件
下面的配置将每天产生一个日志文件,并且将按以下命名方式命名:
2010-06-05.log
2010-06-06.log
2010-06-07.log
2010-06-08.log
……
<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="file" xsi:type="File"
layout="${longdate} ${logger} ${message}"
fileName="${basedir}/${shortdate}.log" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="file" />
</rules>
</nlog>
异步日志记录
根据使用场景,可以为文件类型目标增加异步包装器属性,通过此种方法可以使用独立的线程记录日志信息,从而防止主线程被阻塞且更快的执行。推荐在多线程的服务器应用程序中使用异步日志记录功能,而在执行时间不长的命令行程序中则没有必要使用此方法。
<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<!-- Log in a separate thread, possibly queueing up to
5000 messages. When the queue overflows, discard any
extra messages-->
<target name="file" xsi:type="AsyncWrapper" queueLimit="5000" overflowAction="Discard">
<target xsi:type="File" fileName="${basedir}/logs/${level}.txt" />
</target>
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="file" />
</rules>
</nlog>
创建以逗号隔开的日志文件(CSV格式)
为了创建CSV格式文件,可以使用以下配置,它利用了CsvLayout。以下示例将创建一个含有4列并被格式化为CSV格式的日志文件。
<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="csv" xsi:type="File" fileName="${basedir}/file.csv">
<layout xsi:type="CSVLayout">
<column name="time" layout="${longdate}" />
<column name="message" layout="${message}" />
<column name="logger" layout="${logger}"/>
<column name="level" layout="${level}"/>
</layout>
</target>
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="csv" />
</rules>
</nlog>
按大小将文件存档
日志文件达到一定大小之后,将移动到指定的其它位置以存档。下面的配置将创建logs/logfile.txt,并当此文件大小达到10KB时,将 日志内容移动至archives/log.000000.txt, archives/log.000001.txt, archives/log.000002.txt等(并且默认只保留最后的9个存档文件)。
<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="file" xsi:type="File"
layout="${longdate} ${logger} ${message}"
fileName="${basedir}/logs/logfile.txt"
archiveFileName="${basedir}/archives/log.{#####}.txt"
archiveAboveSize="10240"
archiveNumbering="Sequence"
concurrentWrites="true"
keepFileOpen="false"
encoding="iso-8859-2" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="file" />
</rules>
</nlog>
按时间将文件存档
日志文件也可以基于时间设置自动存档。下面的配置将在每天的开始时刻里将日志文件存档,并且使用滚动文件命名方式。因此,前一天的日志可以在文件 archives/log.0.txt文件中找到,再前一天的数据可以在archives/log.1.txt文件中找到,以此类推。此配置将保存最近的 7个存档文件,因此,早于当前时间一周前的日志数据将被删除。
<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="file" xsi:type="File"
layout="${longdate} ${logger} ${message}"
fileName="${basedir}/logs/logfile.txt"
archiveFileName="${basedir}/archives/log.{#}.txt"
archiveEvery="Day"
archiveNumbering="Rolling"
maxArchiveFiles="7"
concurrentWrites="true"
keepFileOpen="false"
encoding="iso-8859-2" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="file" />
</rules>
</nlog>
[1] http://msdn.microsoft.com/zh-cn/library/aa365503(v=VS.85).aspx
---------------------------------------------
作者:Ritchie(乞戈)
出处:http://RitchieChen.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
转:NLog之:文件类型目标(File target)的更多相关文章
- js判断文件类型大小并给出提示
上传文件是工作中常用的功能,不同的场景对不同的文件类型和文件大小都有不同的要求: <form id="uploadForm" method="post" ...
- JAVA对文件类型的校验
通常,在WEB系统中,上传文件时都需要做文件的类型校验,大致有如下几种方法: 1. 通过后缀名,如exe,jpg,bmp,rar,zip等等. 2. 通过读取文件,获取文件的Content-type来 ...
- 判断pdf、word文档、图片等文件类型(格式)、大小的简便方法
判断pdf.word文档.图片等文件类型(格式).大小的简便方法 很久没发文了,今天有时间就写一下吧. 关于上传文件,通常我们都需要对其进行判断,限制上传的类型,如果是上传图片,我们甚至会把图片转化成 ...
- Springmvc 上传文件MultipartFile 转File
转自:http://blog.csdn.net/boneix/article/details/51303207 业务场景:ssm框架 上传文件到应用服务器过程中要传到专有的文件服务器并返回url进行其 ...
- UNIX高级环境编程(3)Files And Directories - stat函数,文件类型,和各种ID
在前面的两篇,我们了解了IO操作的一些基本操作函数,包括open.read和write. 在本篇我们来学习一下文件系统的其他特性和一个文件的属性,涉及的函数功能包括: 查看文件的所有属性: 改变文件所 ...
- HTML5中的input type为file控件限制上传文件类型及扩展
简单介绍 input file控件限制上传文件类型如下:1.文件类型中间用,分开:2.html和htm这样的要写成两个: 3实例: <input type="file" na ...
- input type='file'限制上传文件类型
前端与后台数据进行对接时,就避免不了要使用ajax进行http请求,常用的请求就两个post与get:然而常见的post请求的需求是文件上传,可能我一说到文件上传大家都觉得so easy啊,没什么嘛 ...
- input file控件限制上传文件类型
网页上添加一个input file HTML控件: <input id="File1" type="file" /> 默认是这样的,所有文件类型都会 ...
- HTML input="file" 浏览时只显示指定文件类型 xls、xlsx、csv
html input="file" 浏览时只显示指定文件类型 xls.xlsx.csv <input id="fileSelect" type=" ...
随机推荐
- 【Software Clone】2014-IEEE-Towards a Big Data Curated Benchmark of Inter-Project Code Clones
Abstract 大数据的克隆检测和搜索算法已经作为嵌入在应用中的一部分. 本文推出一个代码检测基准.包含一些已知的真假克隆代码.其中包括600万条真克隆(包含type-1,type-2,type-3 ...
- SNF开发平台WinForm之四-开发-主细表管理页面-SNF快速开发平台3.3-Spring.Net.Framework
4.1运行效果: 4.2开发实现: 4.2.1 有了第一个程序的开发,代码生成器的配置应该是没有问题了,我们只要在对应的数据库中创建我们需要的表结构就可以了,如下: 主表结构如下: ...
- 使用unetbootin制作Debian安装U盘
有时需要在没有光驱的裸机上安装系统,这时我们可以使用unetbootin制作一个系统安装U盘. 1.在网上下载好vmlinuz,initrd.gz,boot.img.gz. 2.然后使用unetboo ...
- CentOS 6.4 编译安装LLVM3.3,Clang和Libc++
LLVM的最新版本3.3终于在6月17日发布了,按之前的计划6月5日就应该发布了,不过毕竟没有太晚,赶在VS2013 preview(6月26日微软Build大会)之前出来了.加上之前gcc4.8.1 ...
- Java中基本数据类型的存储方式和相关内存的处理方式(java程序员必读经典)
1.java是如何管理内存的 java的内存管理就是对象的分配和释放问题.(其中包括两部分) 分配:内存的分配是由程序完成的,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对 ...
- XML to Entity
public static T GetEntityByXml<T>(string xml, string rootNode=null) where T : new() { if (stri ...
- Sprint Three 回顾与总结&发表评论&团队贡献分
● 一.回顾与总结 (1)回顾 燃尽图: Sprint计划-流程图: milestones完成情况如下: (2)总结 从sprint one到three,我们团队配合十分默契,互相帮助,虽然遇到了不少 ...
- css 布局absolute与relative的区别
absolute:当使用时,表示在文档流中没有实际存在位置(浮动),在不设置任何方位值时,只能按兵不动,当设置了方位值之后,会紧接着去寻找距离最近的能够将它包含住的父级元素,然后进行定位. relat ...
- Tesseract-OCR引擎 入门
OCR(Optical Character Recognition):光学字符识别,是指对图片文件中的文字进行分析识别,获取的过程. Tesseract:开源的OCR识别引擎,初期Tesseract引 ...
- Java的final关键字详解
Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...