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模块,必 ...
随机推荐
- 背后的故事之 - 快乐的Lambda表达式(一)
快乐的Lambda表达式(二) 自从Lambda随.NET Framework3.5出现在.NET开发者眼前以来,它已经给我们带来了太多的欣喜.它优雅,对开发者更友好,能提高开发效率,天啊!它还有可能 ...
- HTML块级元素
前面的话 在HTML5出现之前,人们一般把元素分为块级.内联和内联块元素.本文将详细介绍HTML块级元素 h 标题(Heading)元素有六个不同的级别,<h1>是最高级的,而&l ...
- zookeeper源码分析之一服务端启动过程
zookeeper简介 zookeeper是为分布式应用提供分布式协作服务的开源软件.它提供了一组简单的原子操作,分布式应用可以基于这些原子操作来实现更高层次的同步服务,配置维护,组管理和命名.zoo ...
- Golang 编写的图片压缩程序,质量、尺寸压缩,批量、单张压缩
目录: 前序 效果图 简介 全部代码 前序: 接触 golang 不久,一直是边学边做,边总结,深深感到这门语言的魅力,等下要跟大家分享是最近项目 服务端 用到的图片压缩程序,我单独分离了出来,做成了 ...
- JavaScript对象和数组
1.JavaScript中有两个非常重要的数据类型是对象和数组. 通过"."或者"[]"来访问对象属性 举例:var book = { topic:" ...
- 中文 iOS/Mac 开发博客列表
中文 iOS/Mac 开发博客列表 博客地址 RSS地址 OneV's Den http://onevcat.com/atom.xml 一只魔法师的工坊 http://blog.ibireme.com ...
- 项目持续集成环境(jenkins + SVN + maven + tomcat)
整体流程 每次SVN上代码有变动,触发自动构建动作,并部署到服务器的tomcat上,具体流程: 1.SVN上提交代码修改 2.maven执行Goals 3.将web工程打成war包 4.关闭服务器的t ...
- mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法!
mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法! 修改mysql5.7的配置文件即可解决,方法如下: linux版:找到mysql的安装路径进入默认的为/usr/shar ...
- (转载) RESTful API 设计指南
作者: 阮一峰 日期: 2014年5月22日 网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备......). 因此,必须有一种统一的机制 ...
- 【转】 XenServer的架构
一.Dom0或者控制域 XenServer从安装上看起来像是一个Linux,所以有些同学认为XenServer就是Linux或者是Linux修改的.真实的XenServer和Linux的关系是这样的: ...