Log4net - 规则简介
参考页面:
http://www.yuanjiaocheng.net/CSharp/csharprumenshili.html
http://www.yuanjiaocheng.net/entity/mode-first.html
http://www.yuanjiaocheng.net/entity/database-first.html
http://www.yuanjiaocheng.net/entity/choose-development-approach.html
http://www.yuanjiaocheng.net/entity/query-with-edm.html
项目过程中, 不可避免的, 需要使用到日志功能. 在我接触过的项目中, 也有自己弄一套日志的, 但是更多的, 还是使用别人成熟的dll, 比如log4.
log4相关的文档, 真是非常的多, 也非常的全, 但是本着温故而知新的目的, 还是想把这个过一遍.
先放一个小Demo在上面
<appender name="TraceLogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="Logs\trace.txt" /> <MaxSizeRollBackups value="20" /> <StaticLogFileName value="false" /> <DatePattern value="yyyyMMdd'.txt'" /> <RollingStyle value="Size" /> <MaximumFileSize value="10MB"/> <appendToFile value="true" /> <layout type="log4net.Layout.PatternLayout"> <header value="[BEGIN LOGGING AT %date]%newline" type="log4net.Util.PatternString" /> <footer value="[END LOGGING AT %date]%newline%newline" type="log4net.Util.PatternString" /> <ConversionPattern value="%d [%t] %-5p %c - %m%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter,log4net"> <levelMin value="DEBUG" /> <levelMax value="INFO" /> </filter> </appender>
主要有五个组成部分: Appenders, Filters, Layouts, Loggers, Object Renders
1. Appenders
用来定义日志的输出方式. 可以通过配置Filters和Layout来实现日志的过滤和输出格式.
他的输出方式有很多种, 这里主要介绍几种项目中最常用的.
AdoNetAppender | 将日志记录到数据库中 |
FileAppender | 将日志输出到文件 |
RollingFileAppender | 将日志以回滚文件的形式写到文件中 |
SmtpAppender | 将日志写到邮件中 |
2. Filters
过滤器可以过滤掉Appender输出的内容.
DenyAllFilter | 阻止所有的日志事件被记录 |
LevelMatchFilter | 只有指定等级的日志事件才被记录 |
LevelRangeFilter | 日志等级在指定范围内的事件才被记录 |
LoggerMatchFilter | Logger名称匹配,才记录 |
PropertyFilter | 消息匹配指定的属性值时才被记录 |
StringMathFilter | 消息匹配指定的字符串才被记录 |
3. Layouts
用于控制Appender的输出格式, 可以使线性的, 也可以使Xml. 但是一个Appender只能有个一个Layout. 配置了这个之后, 可以不用在程序中再去自定义一个格式了.
最常用的, 应该还是自定义格式的PatternLayout. 接下来看一下 ConversionPattern 里面的格式和意义
<ConversionPattern value="%d [%t] %-5p %c - %m%n" />
a appdomain |
引发日志事件的应用程序域的名称 |
c (小写) logger |
记录日志事件的Logger对象的名字 可以使用精度说明符控制Logger的名字的输出层级, 默认输出全名 注意,精度符的控制是从右开始的。例如:logger 名为 "a.b.c", 输出模型为 %logger{2} ,将输出"b.c" |
C (大写) class type |
引发日志请求的类的全名 可以使用精度控制符. 例如: 类名是 "log4net.Layout.PatternLayout", 格式模型是 %type{1}将输出"PatternLayout"。(也是从右开始的。) 警告:会影响性能。 |
d date |
记录当前本地时间. 如 %d{HH:mm:ss,fff} 或 %d{dd MMM yyyy HH:mm:ss,fff} 建议还是使用自定义格式的时间吧. |
exception |
异常信息 日志中必须存一个异常对象, 如果日志事件不包含没有异常对象, 那么什么也输出不了. 异常输出完毕后, 会跟一个换行. 一般会在输出异常前加一个换行, 并将异常放在最后. |
F file |
发生日志请求的源代码文件的名字 警告:只在调试的时候有效。调用本地信息会影响性能。 |
U identity |
当前活动用户的名字(Principal.Identity.Name). 警告:会影响性能。(我测试的时候%identity返回都是空的。) |
l (L的小写) location |
引发日志事件的方法(包括命名空间和类名),以及所在的源文件和行号。 警告:会影响性能。没有pdb文件的话,只有方法名,没有源文件名和行号。 |
L p level |
日志等级 |
line | 引发日志的行号 |
m message |
由应用程序提供给日志的消息 |
M method |
发生日志请求的方法名(只有方法名而已)。 警告:会影响性能。 |
X mdc P property propertites |
输出事件的特殊属性。例如: %property{user} 输出user属性。 属性是由loggers或appenders添加到时间中的。 有一个默认的属性"DE<log4net:HostName"总是会有。 DE<%property将输出所以的属性 。 |
n newline |
换行符 |
r timestamp |
从程序启动到事件发生所经过的毫秒数。 |
t thread |
引发日志事件的线程,如果没有线程名就使用线程号。 |
w username |
当前用户的WindowsIdentity。(类似:HostName\Username) 警告:会影响性能。 |
utcdate |
发生日志事件的UTC时间。DE<后面还可以跟一个日期格式,用大括号括起来。 DE<例如:%utcdate{HH:mm:ss,fff}或者%utcdate{dd MMM yyyy HH:mm:ss,fff}。 如果utcdate后面什么也不跟,将使用ISO8601 格式 。 日期格式和.Net中DateTime类的ToString方法中使用的格式是一样。 另外log4net还有3个自己的格式Formatter。 它们是 "ABSOLUTE", "DATE"和"ISO8601"分别代表AbsoluteTimeDateFormatter,DateTimeDateFormatter和Iso8601DateFormatter。 例如: %date{ISO8601}或%date{ABSOLUTE}。 它们的性能要好于ToString。 |
x ndc |
NDC (nested diagnostic context) |
% |
%%输出一个百分号 |
上面demo中的-5是什么意思呢? 接着看
Format modifier | left justify | minimum width | maximum width | comment |
---|---|---|---|---|
%20logger | false | 20 | none |
如果logger名不足20个字符,就在左边补空格。 |
%-20logger | true | 20 | none |
如果logger名不足20个字符,就在右边补空格。 |
%.30logger | NA | none | 30 |
超过30个字符将截断。 |
%20.30logger | false | 20 | 30 |
logger名要在20到30之间,少了在左边补空格,多了截断。 |
%-20.30logger | true | 20 | 30 |
logger名要在20到30之间,少了在右边补空格,多了截断。 |
4. Loggers
Logger是直接和应用程序交互的组件. Logger只是产生日志, 然后由它引用的Appender记录到指定的地方, 并有Layout控制输出格式.
Logger提供了多种方式来记录一个日志消息, 也可以有多个Logger同时存在. 每个实例化的Logger对象被log4net作为命名实体来维护.
log4net使用继承体系, 两个Logger, a 和 a.b, a是a.b的祖先. 每个Logger都继承了它祖先的属性.
日志的等级有如下几级:
OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL.
5. Object Renders
我对Object Renders的理解是这样的。它将告诉logger如何把一个对象转化为一个字符串记录到日志里。(你可能注意到了,ILog中定义的接口接收的参数是Object,而不是String。)
例如你想把Orange对象记录到日志中,但此时logger只会调用Orange默认的ToString方法而已。所以要定义一个OrangeRender类实现log4net.ObjectRender.IObjectRender接口,然后注册它。这时logger就会知道如何把Orange记录到日志中了。
不过我没有测试过,具体怎么做还是看文档吧。
参考:
log4net使用手册 (这一篇都是从这里拷贝过来的, 链接里面更加详细)
Log4net - 规则简介的更多相关文章
- Log4net - 规则简介(续)
之前对于配置并没有结束, 中间插了一个demo进去, 能够更直观的看到日志是怎么使用的. 这一篇, 我加了一些自己的东西进去, 可以更直观的来理解这些配置内容. 这里就继续介绍配置文件中的内容. 1. ...
- Java基础-正则表达式(Regular Expression)语法规则简介
Java基础-正则表达式(Regular Expression)语法规则简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.正则表达式的概念 正则表达式(Regular Exp ...
- Emmet(Zen Coding)语法规则简介
———Emmet(Zen Coding)语法规则简介——— [Zen Coding可谓快速开发HTML和CSS的利器,主要采用仿css类选择器方式编写代码,以下是该利器的基本语法规则和代码示例] 基础 ...
- 【2016-08-21】Linux内核版本编号规则简介
我们已经了解可以使用下面的几天命令来查看Linux内核版本及Ubuntu发行版本的信息: uname -r uname -a cat /proc/version lsb-release -a 等等 可 ...
- 自动构建Makefile(1)--C/C++编译流程&Makefile规则简介
前言: 大家在Windows上使用VS构建C/C++程序时,不需要自己编辑略显晦涩的Makefile文件,而对于初学者而言, 他们甚至没意识到它的存在.VS是自动生成Makefile文件, 并构建 ...
- Rewrite规则简介
Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言.可基于服务器级的(httpd.conf)和目录级的(.htaccess)两种方式.如果要想用到rewrite模块,必须先 ...
- 自定义 Lint 规则简介
上个月,笔者在巴黎 Droidcon 的 BarCamp 研讨会上聆听了 Matthew Compton 关于编写自己的 Lint 规则的讲话.深受启发之后,笔者想就此话题做进一步的探索. 定义 如果 ...
- log4net使用简介
平常我们在开发网站时,有一些比较重要的地方需要添加日志记录.一般日志记录分为两种:1)在数据库中添加一张日志表,用来记录用户操作并给用户提醒(用户可以看到). 2)在系统中添加一个日志文件,用来记录一 ...
- 第一篇 Rewrite规则简介
1.Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言.可基于服务器级的(httpd.conf)和目录级的(.htaccess)两种方式.如果要想用到rewrite模块,必 ...
随机推荐
- 【AR实验室】ARToolKit之Example篇
0x00 - 前言 PS : 我突然意识到ARToolKit本质可能就是一个可以实时求解相机内外参的解决方案. 拿到一个新的SDK,90%的人应该都会先跑一下Example.拿到ARToolKit的S ...
- WCF学习之旅—第三个示例之四(三十)
上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) WCF学习之旅—第三个示例之三(二十九) ...
- win8.1硬盘安装ubuntu14.04双系统
在网上找了很多方法都失败了,原因是大多数方法都是用mbr方式安装的,如grub4dos,easybcd.以至于连自己都怀疑win8能不能用硬盘安装,差点就去买个u盘来安装了,就在打算放弃的时候在ubu ...
- Android -- 真正的 高仿微信 打开网页的进度条效果
(本博客为原创,http://www.cnblogs.com/linguanh/) 目录: 一,为什么说是真正的高仿? 二,为什么要搞缓慢效果? 三,我的实现思路 四,代码,内含注释 五,使用方法与截 ...
- 自己来实现一个简易的OCR
来做个简易的字符识别 ,既然是简易的 那么我们就不能用任何的第三方库 .啥谷歌的 tesseract-ocr, opencv 之类的 那些玩意是叼 至少图像处理 机器视觉这类课题对我这种高中没毕业的人 ...
- 2016/12/31_Python
今天学习主要内容: Python: 1.with语句(补充昨天的文件操作) 用with打开的文件在脚本结束会自动关闭,以防普通打开方式忘记关闭文件连接 语法: with open("demo ...
- Flyweight(享元模式)
import java.util.Hashtable; /** * 享元模式 * @author TMAC-J * 享元模式一般和工厂模式一起使用,但此处为了更好说明,只用享元模式 * 定义:享元模式 ...
- PHP设计模式(五)建造者模式(Builder For PHP)
建造者模式:将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示的设计模式. 设计场景: 有一个用户的UserInfo类,创建这个类,需要创建用户的姓名,年龄,爱好等信息,才能获得用 ...
- Android SDK 与API版本对应关系
Android SDK版本号 与 API Level 对应关系如下表: Code name Version API level (no code name) 1.0 API level 1 ( ...
- T-SQL学习记录
T-sql是对SQL(structure query language )的升级.可以加函数. 系统数据库:master管理数据库.model模版数据库,msdb备份等操作需要用到的数据库,tempd ...