log4net 使用笔记
一、Log4net特征
1、自定义日志输出级别
Log4net将日志分为五个级别优先级从高到低依次:FATAL > ERROR > WARN > INFO > DEBUG,此外还有ALL(允许所有的日志请求)和OFF(拒绝所有的日志请求)这两种特殊的级别。可以通过日志级别来控制日志是否输出。
如果你配置文件中定义的是INFO级别,程序中有三种日志记录方式
Log.Info(“日志内容”),Log.Warn(“日志内容”),Log.Debug(“日志内容”)
则Log.Info,Log.Debug都会输出日志,Log.Warn不会输出日志。
2、自定义日志输出方式
Log4net的日志输出方式很灵活,可以将日志输出至文本文件,控制台,邮件,Windows Event Log,数据库等等。对于写日志至文本文件还可以有如下非常灵活的配置。
a、按时间段打印日志,按月,按日 ,按时,按分等随你配置 b、按文件的大小 打印滚动日志,如每10M,100M一个日志文件,这样可以防止日志文件不至于过大,日志文件达到4,5G日后我们基本上就很难打开了。 c、指定日志大小,比如说指定500M,那么日志将只有一个且不会超出500M。
二、Log4net的安装
1、用户可以从 http://logging.apache.org/log4net/ 下载log4net的源代码。
2、解压软件包后,在解压的src目录下将log4net.sln载入Visual Studio .NET,编译后可以得到log4net.dll。
3、用户要在自己的程序里加入日志功能,只需将log4net.dll引入工程即可。
三、在程序中使用log4net
1、log4net配置文件与程序的关联
log4net的配置可以放在应用程序的默认配置文件中(app.config或web.config),也可以在自己指定的配置文件中。log4net框架中是使用log4net.Config.XmlConfigurator在程序集的级别上定义配置文件。
例如,找到当前项目的Assemblyinfo.cs文件添加下面一行,将与Web.config文件关联起来
[assembly: log4net.Config.XmlConfigurator(ConfigFile="Web.config",Watch=true)]
Assemblyinfo.cs配置说明
ConfigFile
指出了我们的配置文件的路径及文件名,包括扩展名。
ConfigFileExtension
如果我们对被编译程序的程序集使用了不同的文件扩展名,那么我们需要定义这个属性,缺省的,程序集的配置文件扩展名为”config”。
Watch (Boolean属性)
log4net框架用这个属性来确定是否需要在运行时监视文件的改变。如果这个属性为true,那么FileSystemWatcher将会被用来监视文件的改变,重命名,删除等事件。
其中:ConfigFile和ConfigFileExtension属性不能同时使用,ConfigFile指出了配置文件的名字
四、log4net的标准配置文档示例(web.config)
<?xmlversion="1.0"encoding="utf-8" ?>
<configuration>
<configSections>
<sectionname="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler" />
</configSections>
<log4net>
<root>
<levelvalue="WARN" />
<appender-refref="LogFileAppender" />
<appender-refref="ConsoleAppender" />
</root>
<loggername="testApp.Logging">
<levelvalue="DEBUG"/>
</logger>
<appendername="LogFileAppender" type="log4net.Appender.FileAppender" >
<paramname="File"value="log-file.txt" />
<paramname="AppendToFile"value="true" />
<layouttype="log4net.Layout.PatternLayout">
<paramname="Header"value="[Header] "/>
<paramname="Footer"value="[Footer] "/>
<paramname="ConversionPattern" value="%d [%t] %-5p %c[%x] - %m%n" />
</layout>
<filtertype="log4net.Filter.LevelRangeFilter">
<paramname="LevelMin"value="DEBUG" />
<paramname="LevelMax"value="WARN" />
</filter>
</appender>
<appendername="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layouttype="log4net.Layout.PatternLayout">
<paramname="ConversionPattern" value="%d [%t] %-5p %c [%x] -%m%n" />
</layout>
</appender>
</log4net>
</configuration>
五、配置文件节点说明
1、在配置章节中,定义section节点。节点名称为:须为log4net,且大小写敏感。
<configSections>
<sectionname="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler" />
</configSections>
2、root节点说明
(1)根logger,所有其它logger都默认继承它。root元素没有属性。
(2)支持的子元素
appender-ref 0个或多个,要引用的appender的名字。
level 最多一个。只有在这个级别或之上的事件才会被记录。
param 0个或多个,设置一些参数。
(3)在<root>标签里,可以定义level级别值和Appender的列表。
如果没有定义LEVEL的值,则缺省为DEBUG。可以通过<appender-ref>标签定义日志对象使用的Appender对象。<appender-ref>声明了在其他地方定义的Appender对象的一个引用。在一个logger对象中的设置会覆盖根日志的设置。而对Appender属性来说,子日志对象则会继承父日志对象的Appender列表。这种缺省的行为方式也可以通过显式地设定<logger>标签的additivity属性为false而改变。
3、Logger节点说明
(1)支持的属性name,Additivity两个属性
name必须的,logger的名称
additivity 可选,取值是true或false,默认值是true。设置为false时将阻止父logger中的appender。
(2)支持的子元素
appender-ref 0个或多个,要引用的appender的名字。
evel最多一个。只有在这个级别或之上的事件才会被记录。
param 0个或多个,设置一些参数。
(3)<logger> 元素预定义了一个具体日志对象的设置
然后通过调用LogManager.GetLogger(“testAPP.Logging”)函数,你可以检索具有该名字的日志。如果LogManager.GetLogger(…)打开的不是预定义的日志对象,则该日志对象会继承根日志对象的属性。知道了这一点,我们可以说,其实<logger>标签并不是必须的。
4、Appender节点说明
(1)定义日志的输出方式,只能作为 log4net 的子元素。name属性必须唯一,type属性必须指定。支持name,type两个属性。
name 必须的,Appender对象的名称
type 必须的,Appender对象的输出类型
(2)支持的子元素
appender-ref 0个或多个,允许此appender引用其他appender,并不是所以appender类型都支持。
filter 0个或多个,定义此app使用的过滤器。
layout 最多一个。定义appender使用的输出格式。
param 0个或多个,设置Appender类中对应的属性的值。
(3)在<root>标签或单个的<logger>标签里的Appender对象可以用<appender>标签定义
<appender>标签的基本形式如上面所示。它定义了appender的名字和类型。 另外比较重要的是<appender>标签内部的其他标签。不同的appender有不同的<param>标签。在这里,为了使用FileAppender,你需要一个文件名作为参数。另外还需要一个在<appender>标签内部定义一个Layout对象。Layout对象定义在它自己的<layout>标签内。<layout>标签的type属性定义了Layout的类型(在本例里是PatternLayout),同时也确定了需要提供的参数值。Header和Footer标签提供了一个日志会话(logging session)开始和结束时输出的文字。有关每种appender的具体配置的例子,可以在log4net\doc\manual\example-config-appender.html中得到。
5、Filter节点说明
过滤器,只能作为<appender>的子元素。
支持的属性:
type 必须的,Filter的类型
支持的子元素:param 0个或多个,设置一些参数。
6、Layout节点说明
布局,只能作为<appender>的子元素。
支持的属性:
type 必须的,Layout的类型
支持的子元素:param 0个或多个。
log4net.Layout.PatternLayout中的转换模式(ConversionPattern)
%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息
%n(new line):换行
%d(datetime):输出当前语句运行的时刻
%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
%t(thread id):当前语句所在的线程ID
%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等
%c(class):当前日志对象的名称,例如:
%L:输出语句所在的行号
%F:输出语句所在的文件名
%-数字:表示该项的最小长度,如果不够,则用空格填充
例如
转换模式为%r [%t]%-5p %c - %m%n 的 PatternLayout 将生成类似于以下内容的输出:
176 [main] INFO org.foo.Bar - Located nearest gas station.
7、Param
<param>元素可以是如何元素的子元素。
支持的属性:
name 必须的,取值是父对象的参数名。
value 可选的,value和type中,必须有一个属性被指定。value是一个能被转化为参数值的字符串。
type 可选的,value和type中,必须有一个属性被指定。type是一个类型名,如果type不是在log4net程序集中定义的,就需要使用全名。
log4net 使用笔记的更多相关文章
- Log4net使用笔记
Log4net使用笔记 编写人:CC阿爸 2013-10-29 近来在处理项目时候,想将系统的操作日志以文本的形式记录下来,方便对系统操作记录进行追踪. 经过在网上搜索部分解决方案,大致可以归纳如 ...
- [转载]Log4net学习笔记
Log4net 学习笔记: 主要是根据apache站点整理的: 原文链接:http://logging.apache.org/log4net/release/sdk/ http://logging.a ...
- log4net学习笔记
一直想找一个好用的日子类,今天偶然的机会看到了log4net这个类库,过来学习一下. log4net是.NET框架下的一个日子类库,官网是http://logging.apache.org/log4n ...
- asp.net MVC日志插件Log4Net学习笔记二:保存日志到sqlserver的配置
1.写到sqlserver的配置: <!--保存到SQLSERVER数据库日志--> <log4net> <appender name="AdoNetAppen ...
- asp.net MVC日志插件Log4Net学习笔记一:保存日志到本地
log4net(Log For Net)是Apache开源的应用于.Net框架的日志记录工具,详细信息参见Apache网站.它是针对Java的log4j(Log For Java的)姊妹工具.用过lo ...
- log4net 学习笔记
记入最基本的用法 : refer : http://www.cnblogs.com/aehyok/archive/2013/05/07/3066010.html <configuration&g ...
- Log4Net学习笔记(1)-完整的例子
一.开发环境 编译器:VS2013 .Net版本:4.5 二.开发流程 1.从nuget上获取log4net 2.配置log4net的配置文件 <?xml version="1.0&q ...
- ASP.NET MVC学习之Log4Net配置(日志记录)
Log4Net配置笔记---- 首先,添加对log4net.dll的引用. 在Web.config文件下的Configuration节点下添加Log4Net的配置信息: <!--Log4Net配 ...
- log4net基本日志使用笔记[windows application]
Ref: http://www.cnblogs.com/wangsaiming/archive/2013/01/11/2856253.html http://www.cnblogs.com/zhouf ...
随机推荐
- bzoj 2115 线性基
这种路径异或问题,可以转换为一条路径和若干个环的线性组合,然后就能用线性基搞了. 复习了一波线性基. #include<bits/stdc++.h> #define LL long lon ...
- python沙盒逃逸
前言 最近遇到了很多python沙盒逃逸的题目(不知道是不是因为现在python搭的站多了--),实际使用时发现只会复制别人的payload是不够用的,于是自己来总结一波(顺带一提python沙盒逃逸 ...
- Wannafly挑战赛7 C - 小Q与氪金游戏
题目描述 “为世界上所有的美好而战!”小Q同学最近沉迷“稳固3”,为了从最新的蛋池中抽出自己喜欢的角色卡,不惜氪下重金.在这个游戏中,氪一单可以得到x个宝石,而抽一次卡需要花费y个宝石,由于游戏策划十 ...
- Python之路【第二篇】: 列表、元组、字符串、字典、集合
本文内容: -------------------------------------- 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表(list) 序列是Pyt ...
- 对java前后端分离的理解
到目前为止,身为一个java后端开发人员的我, 在工作期间,无非就是ui设计页面,前端开发html,之后将做好的页面交给我,我负责后台逻辑一件html的页面渲染. 好好滴一个后台开发人员,莫名其妙的做 ...
- 【Leetcode】583. Delete Operation for Two Strings
583. Delete Operation for Two Strings Given two words word1 and word2, find the minimum number of st ...
- code forces 505A
Mr. Kitayuta's Gift Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64 ...
- HDU3585 Information Disturbing 树形dp+二分
http://acm.split.hdu.edu.cn/showproblem.php?pid=3586 题意 : 给定一个带权无向树,要切断所有叶子节点和1号节点(总根)的联系,每次切断边的费用 ...
- [待码][BZOJ1858]SCOI2010序列操作 jzyzoj1655
待码的线段树.....太长了看上去不是很想写 [ 什么破理由啊摔,不要脸 ] 嗯先水几道再写
- BZOJ3289[JZYZOJP2018]: Mato的文件管理 莫队+树状数组+离散化
描述 Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是加密过的, ...