转: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=" ...
随机推荐
- 【开源】EFW框架系列文章索引
开源轻量级.Net框架EnterpriseFrameWork详解 ——自己动手写框架 ——适合中小企业的开发框架 ——Ajax+JqueryEasyUI+NotNetBar+MVC+WebServic ...
- 解决Eclipse报errors running builder ‘javascript validator’ on project
导入jquery的js到项目中,Eclipse每次检测到功能代码变化(保存动作触发)就报错: errors running builder ‘javascript validator’ on proj ...
- [0x00 用Python讲解数据结构与算法] 概览
自从工作后就没什么时间更新博客了,最近抽空学了点Python,觉得Python真的是很强大呀.想来在大学中没有学好数据结构和算法,自己的意志力一直不够坚定,这次想好好看一本书,认真把基本的数据结构和算 ...
- 详解SPI中的极性CPOL和相位CPHA
SPI由于接口相对简单(只需要4根线),用途算是比较广泛,主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间.即一个SPI的Master通过SPI与一个 ...
- 基于jQuery点击加载动画按钮特效
分享一款基于jQuery点击加载动画按钮特效.这是一款基于jQuery+CSS3实现的鼠标点击按钮加载动画特效代码.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div ...
- java中反射机制通过字节码文件对象获取字段和函数的方法
pclass = Class.forName("get_class_method.Person"); //Field ageField = pclass.getField(&quo ...
- UML系列01之 UML和绘图工具Visio介绍
概要 UML,全称是Unified Modeling Language,中文是"统一建模语言".通俗点说,UML是一种创建模型的语言.UML是在开发阶段,说明,可视化,构建和书写一 ...
- Tips11:用[Rang]来限制Inspector中的变量
我们在写脚本的过程中可能会用到很多Public变量,如INT型,Float型,这些变量在项目中可能有着一个默认的实际范围,如血量不能为负数,而且int float本来就是有一个范围的,如果对这些变量加 ...
- intellij 调试方法
intellij 调试方法 转自 http://www.th7.cn/Program/net/201410/296492.shtml
- Html5+css3+angularjs+jquery+webAPi 开发手机web(一)
前言 随着浏览器的发展 HTML5+CSS3 的使用也越来越广泛,一直想学这个,想学那个折腾下来几乎没学到什么东西.工作经验告诉我,要掌握一门技术,就需要在项目中去磨练, 所以我就准备开发一个手机端的 ...