Log4net - 规则简介(续)
之前对于配置并没有结束, 中间插了一个demo进去, 能够更直观的看到日志是怎么使用的. 这一篇, 我加了一些自己的东西进去, 可以更直观的来理解这些配置内容.
这里就继续介绍配置文件中的内容.
1. <log4net> 标签
<log4net debug="true"></log4net>
支持的属性:
| debug | 可选,取值是true或false,默认是false。设置为true,开启log4net的内部调试。 |
| update | 可选,取值是Merge(合并)或Overwrite(覆盖),默认值是Merge。设置为Overwrite,在提交配置的时候会重置已经配置过的库。 |
| threshold | 可选,取值是repository(库)中注册的level,默认值是ALL。 |
支持的元素:
| appender | 0或多个 |
| logger | 0或多个 |
| renderer | 0或多个 |
| root | 最多一个 |
| param | 0或多个 |
2. <root>标签
<root>
<level value="ALL" />
<appender-ref ref="ErrorLogFileAppender" />
<appender-ref ref="TraceLogFileAppender" />
</root>
根元素, 其他所有的logger都默认继承他, root没有属性
支持的子元素:
| appender-ref | 0个或多个,要引用的appender的名字。 |
| level |
最多一个。 只有在这个级别或之上的事件才会被记录。 OFF / FATAL / ERROR / WARN / INFO / DEBUG / ALL |
| param | 0个或多个, 设置一些参数。 |
3. <logger>标签
从上一篇的例子中, 其实是找不到logger标签的, 如果只是简单的记录日志, 其实并不需要使用到这个标签
支持的属性:
| name | 必须的,logger的名称 |
| additivity | 可选,取值是true或false,默认值是true。设置为false时将阻止父logger中的appender。 |
支持的子元素:
| appender-ref | 0个或多个,要引用的appender的名字。 |
| level | 最多一个。 只有在这个级别或之上的事件才会被记录。 |
| param | 0个或多个, 设置一些参数。 |
4. <appender>标签
<appender name="TraceLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="Logs\Trace\" />
<appendToFile value="true" />
<MaxSizeRollBackups value="20" />
<RollingStyle value="Date" />
<DatePattern value="yyyy-MM-dd'.txt'" />
<StaticLogFileName value="false" />
<!--<MaximumFileSize value="10MB"/>-->
<layout type="log4net.Layout.PatternLayout,log4net">
<header value="[BEGIN LOGGING AT %date]%newline" type="log4net.Util.PatternString" />
<ConversionPattern value="%d [%t] %-5p %c - %m%n" />
<footer value="[END LOGGING AT %date]%newline%newline" type="log4net.Util.PatternString" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter,log4net">
<levelMin value="DEBUG" />
<levelMax value="INFO" />
</filter>
</appender>
定义日志的输出方式,只能作为 log4net 的子元素。name属性必须唯一,type属性必须指定。
支持的属性:
| name | 必须的,Appender对象的名称 |
| type | 必须的,Appender对象的输出类型 |
支持的子元素:
| appender-ref | 0个或多个,允许此appender引用其他appender,并不是所以appender类型都支持。 |
| filter | 0个或多个,定义此app使用的过滤器。 |
| layout | 最多一个。定义appender使用的输出格式。 |
| param | 0个或多个, 设置Appender类中对应的属性的值。 |
实际上<appender>所能包含的子元素远不止上面4个。
在我过去的项目中, 常用的也就两种, 一种是写入文件中, 另一种是写入数据库中. 对于发送到邮件中的, 暂时还没有使用过. 那就主要介绍下前面两种方式吧.
4.1 写入文件中
写入文件中, 各人习惯可能有些不一样, 当然也是与项目相关的. 有些人喜欢按照日期来存, 有些人喜欢放入一个文件中, 设置最大存储值来存. 都是可以的. 如果项目日志文件多, 可以分日期, 如果项目日志文件少, 那么分日期, 就不合算了, 可能会导致文件和日志一样多.
1). 日期方式
<appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--文件目录或者文件名-->
<file value="Logs\Error\" />
<!--为true时, 日志文件只取file的名字; 为false时, 日志文件取名规则为 file+DatePattern-->
<StaticLogFileName value="false" />
<!--文件名格式-->
<DatePattern value="yyyy-MM-dd'.txt'" />
<!--记录日志的形式, Date/Size 两种, 此处表示按日期记录日志-->
<RollingStyle value="Date" />
<!--是否追加到日志中, 默认为true, 无需设置-->
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout,log4net">
<header value="[BEGIN LOGGING AT %date]%newline" type="log4net.Util.PatternString" />
<ConversionPattern value="%d [%t] %-5p %c - %m%n" />
<footer value="[END LOGGING AT %date]%newline%newline" type="log4net.Util.PatternString" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter,log4net">
<levelMin value="ERROR" />
<levelMax value="FATAL" />
</filter>
</appender>
日期方式, 要注意的几个地方, 我在上面用背景色标注出来了.
2). 文件大小限制方式
<appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="Logs\Error.log" />
<RollingStyle value="Size" />
<!--文件夹下记录的日志文件个数, 需要与MaximumFileSize配合使用-->
<MaxSizeRollBackups value="2" />
<!--每个日志文件大小, 不能为小数, 如果这里限制100kb, 但是需要记录的内容有150kb, 会全部记录的-->
<!--可用单位 : KB / MB / GB -->
<MaximumFileSize value="100KB"/>
<StaticLogFileName value="true" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout,log4net">
<header value="[BEGIN LOGGING AT %date]%newline" type="log4net.Util.PatternString" />
<ConversionPattern value="%d [%t] %-5p %c - %m%n" />
<footer value="[END LOGGING AT %date]%newline%newline" type="log4net.Util.PatternString" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter,log4net">
<levelMin value="ERROR" />
<levelMax value="FATAL" />
</filter>
</appender>

从上面的配置看到, 文件夹下能建的日志文件是可以限制的, 那么如果满了怎么办? log4net 不会再创建新文件了, 而是重写的方式去记录日志. 换句通俗的说法, 就是在这几个文件里面转圈圈.
4.2 写入数据库中
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="ADONetAppender" />
</root> <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
<!--缓存条数, 一次性写入数据库, 调试时, 此处设置为1-->
<bufferSize value="1" />
<param name="ConnectionType" value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" />
<param name="ConnectionString" value="server=localhost;user id=root;password=root;database=current;port=3306;CharSet=utf8;" />
<commandText value="insert into ErrorLog(dtDate,sThread,sLevel,sLogger,sMessage,sException) values (@log_date, @thread, @log_level, @logger, @message, @exception);" /> <parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="100" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%t" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="200" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%p" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="500" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="3000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%m" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>
</log4net>
附上建表sql
CREATE TABLE `errorlog` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`dtDate` datetime DEFAULT NULL,
`sThread` varchar(100) DEFAULT NULL,
`sLevel` varchar(200) DEFAULT NULL,
`sLogger` varchar(500) DEFAULT NULL,
`sMessage` varchar(3000) DEFAULT NULL,
`sException` varchar(4000) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8 COMMENT='错误日志表'
OK, 接下来可以直接看结果了:

还是蛮好用的, 配置起来也很简单. 使用起来更简单.
参考:
Log4net - 规则简介(续)的更多相关文章
- Log4net - 规则简介
参考页面: http://www.yuanjiaocheng.net/CSharp/csharprumenshili.html http://www.yuanjiaocheng.net/entity/ ...
- 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模块,必 ...
随机推荐
- uva11732 strcmp() Anyone?
题意:给出多个字符串,两两配对,求总配对次数. 思路:如果两个字符串一样,ans=strlen(字符串)*2+2,如果不同,ans=公共前缀长度*2+1:用左儿子右兄弟建字典树.插入一个字符计算一次. ...
- 题解西电OJ (Problem 1003 -最喜欢的数字)--动态规划
Description zyf最喜欢的数字是1!所以他经常会使用一些手段,把一些非1的数字变 成1,并为此得意不已.他会且仅会的两种手段是: 1.把某个数m除以某个质数p——当然p必须能整除这个数,即 ...
- 在KVM虚拟机中使用spice系列之二(USB映射,SSL,密码,多客户端支持)
在KVM虚拟机中使用spice系列之二(USB映射,SSL,密码,多客户端支持) 发布时间: 2015-02-27 00:16 1.spice的USB重定向 1.1 介绍 使用usb重定向,在clie ...
- nyoj 891 找点
找点 时间限制:2000 ms | 内存限制:65535 KB 难度:2 描述 上数学课时,老师给了LYH一些闭区间,让他取尽量少的点,使得每个闭区间内至少有一个点.但是这几天LYH太忙了,你们帮 ...
- [iOS基础控件 - 5.4] 广告分页代码(UIScrollView制作)
A.概念 例子就是桌面的APP列表,当APP数量超过一个屏幕,自动进行分页 B.实现思路 1.创建一个UIScrollView,这里设置为宽度跟屏幕相同,高度1/4屏幕高度左右 2.使用代码在UI ...
- html中的body标签
<head>标签代表的是页面的"头部",而<body>标签代表的就是页面的"身体"了.如果说<html>标签定义了网页的开始 ...
- NSTimer运行机制和线程问题
A.首先要理解NSTimer运行机制和Runloop之间的关系: 1.IOS的Run Loops机制 Run Loops是线程的基础部份,任何线程,包括主结程,都包含了一个run loop对象,Coc ...
- centos vwwareTools 拷贝文件设置
1. 在root 用户下面 在虚拟机菜单上面选择 Vwware Tools 虚拟机会将 安装文件 拷贝到桌面上面 拷贝这个文件 到 root 文件夹 /home/root 将XXX.tar.g ...
- UITabBarController详解
UITabBarController使用详解 UITabBarController是IOS中很常用的一个viewController,例如系统的闹钟程序,ipod程序等.UITabBarControl ...
- 2015北京网络赛 A题 The Cats' Feeding Spots 暴力
The Cats' Feeding Spots Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/acm ...