`
lovnet
  • 浏览: 6693442 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

log4net使用详细介绍

 
阅读更多


log4net按照不同的【LEVEL】级别输出到不同文件

Log4Net五步走

Log4Net主页: http://logging.apache.org/log4net/,下载Log4Net

Log4Net主要由Logger, Appender, Filter, Layout 4个组件构成, 一般情况下后3个组件在配置文件中配置.

1. LogNet工程引用log4net.dll

2.定义配置文件,可以配置在web.config,也可以单独配置在xml文件里面

3.双击打开AssemblyInfo.cs在最后添加
[assembly: log4net.Config.XMLConfigurator(ConfigFile = “log4net.config”, Watch = true)]


3.创建或获取日志对象
log4net.ILog log = log4net.LogManager.GetLogger(”logger-name”);
可以定义多个log对象,每个log对象分别取配置文件不同的<logger>标记,每个<logger>分别取不同的appender
这样就可以用不同的log对象把日志输出到不同的文件或者其它介质,

4.输出日志信息
log.debug()

Log4net主要由五个部分组成,分别为Logger,Appenders, Filters, Layouts 和Object Renders。


一、Logger(日志)


1. 记录日志的分类:

Log4net能够以多种方式输出日志。支持的日志输出常用的主要媒介有数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite,控制台,文件,事件日志(可以用事件查看器查看)和邮件等多种方式。


2. 日志的级别

Log4net支持多种级别的日志。优先级从高到低依次排列如下:

FATAL > ERROR > WARN > INFO > DEBUG

此外还有ALL(允许所有的日志请求)和OFF(拒绝所有的日志请求)这两种特殊的级别。


二、Appenders


Appenders决定日志输出的方式。

Appenders必须实现log4net.Appenders.IAppender接口。


Log4net目前支持的输出方式包括:
1、AdoNetAppender
将日志记录到数据库中。可以采用SQL和存储过程两种方式。

2、AnsiColorTerminalAppender
在ANSI 窗口终端写下高亮度的日志事件。

3、AspNetTraceAppender
能用asp.net中Trace的方式查看记录的日志。

4、BufferingForwardingAppender
在输出到子Appenders之前先缓存日志事件。

5、ConsoleAppender
将日志输出到控制台。

6、EventLogAppender
将日志写到Windows Event Log.

7、FileAppender
将日志写到文件中。

8、LocalSyslogAppender
将日志写到local syslog service (仅用于UNIX环境下).
9、MemoryAppender
将日志存到内存缓冲区。

10、NetSendAppender
将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。

11、RemoteSyslogAppender
通过UDP网络协议将日志写到Remote syslog service。

12、RemotingAppender
通过.NET Remoting将日志写到远程接收端。

13、RollingFileAppender
将日志以回滚文件的形式写到文件中。

14、SmtpAppender
将日志写到邮件中。

15、TraceAppender
将日志写到.NET trace 系统。

16、UdpAppender
将日志connectionless UDP datagrams的形式送到远程宿主或以UdpClient的形式广播。


三、Filters


Appender对象将日志以缺省的方式传到输出流,然后Filter可以按照不同的标准控制日志的输出。Filter可以再配置文件中配置。最简单的形式是在appender中写明一个Threshold.这样只有级别大于或等于此Threshold的日志才被记录。

Filters必须实现log4net.Filters.IFilter接口。


四、Layouts


Layouts控制日志显示的格式样式。日志的显示格式如下:

"%timestamp [%thread] %-5level %logger - %message%newline"

Timestamp: 表示程序已经开始执行的时间。 单位[毫秒]。

Thread:执行当前代码的线程。

Level:日志的级别。

Logger:日志相关请求的名称。

Message: 日志消息。


Layouts还可以控制日志的输出样式,比如以普通形式或以xml等形式输出。


五、Object Renderers


这是很重要的一项,log4net将按照用户定义的标准输出日志消息。

Object Renders必须实现log4net.ObjectRenderer.IObjectRenerer接口


Logger

负责产生日志消息,可以在代码中调用

Logger的Level属性可以设以下值,由高到低为OFF,FATAL,
ERROR,WARN,INFO,DEBUG,ALL. 高于设定值方法都能写入日志,
Off所有的写入方法都不写到日志里,ALL则相反。例如当我们设成Info时,logger.Debug就会被忽略而不写入文件,但是FATAL,
ERROR,WARN,INFO会被写入,因为他们等级高于INFO;


Appender

负责向存储介质中追加日志, 一般在配置文件中配置,根据保存日志介质的不同Appender有多种,
比如:AdoNetAppender,EventLogAppender,RollingFileAppender等.参见:
http://logging.apache.org/log4net/release/config-examples.HTML.

Filter

负责过滤日志, 一般和Appender联合使用,在配置文件中配置

Layout

负责日志消息的格式, 一般和Appender联合使用,在配置文件中配置。

----------------------------------------------------------------------

log4net标签的框架如下, 该标签下有root, logger, appender等标签

root标签

所有的logger都从root继承, root本身也是一个logger

logger标签

每个logger标签代表一个logger,appender-ref表示该logger产生的日志消息传递给哪个appender,一个logger可以把相同的消

息传递给多个appender记录

appender标签

每个appender表示一个日志的存储位置,name不能和type一样

设定参数

日志根据日期滚动

日志文件名格式为

日志文件名是否是固定不变的


layout type="log4net.Layout.PatternLayout"

日志消息的格式, 表示换行

param name=”ConversionPattern” value=”%d [%t] %-5p %c - %m%n”
param name=”Header” value=” ———————-header————————– ”
param name=”Footer” value=” ———————-footer————————– ”

%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:输出语句所在的文件名

%-数字:表示该项的最小长度,如果不够,则用空格填充

-------------------------------------------------------------------------------------------------------------------------------------

log4net>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<loggername="loggerAX">

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--controlloglevel:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--如果没有定义LEVEL的值,则缺省为DEBUG-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<levelvalue="ALL"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<appender-refref="SmtpAppenderAX"></appender-ref>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<appender-refref="FileAppenderAX"></appender-ref>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑</logger>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<appendername="SmtpAppenderAX"type="log4net.Appender.SmtpAppender">

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<tovalue="AXzhz@163.com"></to>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<fromvalue="AXzhz@163.com"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<subjectvalue="AX'TestLogMessage"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<smtpHostvalue="smtp.163.com"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<usernamevalue="AXzhz"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<passwordvalue="110"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<bufferSizevalue="2048"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--超长部分是否丢弃-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<lossyvalue="false"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--evaluator时好时坏,靠不住,还是用filter实在-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--<evaluatortype="log4net.Core.LevelEvaluator">

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<thresholdvalue="ERROR"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑</evaluator>-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--<evaluatortype="log4net.Core.LevelEvaluator,log4net">

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<thresholdvalue="WARN"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑</evaluator>-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--将导致不能写日志-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--<filtertype="log4net.Filter.DenyAllFilter"/>-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--输出级别在WARN和OFF之间的日志-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<filtertype="log4net.Filter.LevelRangeFilter">

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<paramname="LevelMin"value="WARN"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<paramname="LevelMax"value="OFF"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑</filter>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<layouttype="log4net.Layout.PatternLayout">

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<conversionPatternvalue="%newline%date[%thread]%-5level%logger[%property{NDC}]:%newline%message%newline"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑</layout>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑</appender>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<appendername="FileAppenderAX"type="log4net.Appender.RollingFileAppender">

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--绝对路径-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<filevalue="D://AX.txt"></file>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--相对路径,在项目的根目录下-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--以最后一个路径为准,所以上面的绝对路径下不会写日志-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<filevalue="./Log/AX.txt"></file>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--防止多线程时不能写Log,官方说线程非安全-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--实际使用时,本地测试正常,部署后有不能写日志的情况-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<lockingModeltype="log4net.Appender.FileAppender+MinimalLock"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<appendToFilevalue="true"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--可以为:Once|Size|Date|Composite-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--Composite为Size和Date的组合-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<rollingStylevalue="composite"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--日志最大个数,都是最新的-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--rollingStyle节点为Date时,该节点不起作用-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--rollingStyle节点为Size时,只能有value个日志-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--rollingStyle节点为Composite时,每天有value个日志-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<maxSizeRollBackupsvalue="10"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--当备份文件时,为文件名加的后缀-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--后缀为*.txt时,例:AX.txt_2008-07-24.PxP应该是程序上的一个bug-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--后缀为*.TXT时,例:AX.txt_2008-07-25.TXT-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<datePatternvalue="_yyyy-MM-dd.TXT"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--可用的单位:KB|MB|GB-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--不要使用小数,否则会一直写入当前日志-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<maximumFileSizevalue="1KB"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--置为true,当前最新日志文件名永远为file节中的名字-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<staticLogFileNamevalue="true"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--输出级别在INFO和ERROR之间的日志-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<filtertype="log4net.Filter.LevelRangeFilter">

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<paramname="LevelMin"value="INFO"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<paramname="LevelMax"value="ERROR"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑</filter>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--必须结合起来用,第一个只过滤出WARN,第二个拒绝其它其它日志输出-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<filtertype="log4net.Filter.LevelMatchFilter">

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<paramname="LevelToMatch"value="WARN"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑</filter>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<filtertype="log4net.Filter.DenyAllFilter"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<layouttype="log4net.Layout.PatternLayout">

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<conversionPatternvalue="%date[%thread]%-5level%logger[%ndc]-%message%newline"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑</layout>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑</appender>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑</log4net>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--==================================layout节点的配置说明==================================-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--MadeByAX-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--%n(newline):换行-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--%d(datetime):输出当前语句运行的时刻-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--%r(runtime):输出程序从运行到执行到当前语句时消耗的毫秒数-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--%t(threadid):当前语句所在的线程ID-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--%p(priority):日志的当前优先级别,即DEBUG、INFO、WARN…等-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--%c(class):当前日志对象的名称,例如:-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--模式字符串为:%-10c-%m%n-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--代码为:-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--ILoglog=LogManager.GetLogger(“Exam.Log”);-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--log.Debug(“Hello”);-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--则输出为下面的形式:-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--Exam.Log-Hello-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--%L:输出语句所在的行号-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--%F:输出语句所在的文件名-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--%-数字:表示该项的最小长度,如果不够,则用空格填充-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--例如,转换模式为%r[%t]%-5p%c-%m%n的PatternLayout将生成类似于以下内容的输出:-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--176[main]INFOorg.foo.Bar-Locatednearestgasstation.-->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!---->

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<!--========================================================================================-->

Ⅲ.在Default.aspx.cs的Page_Load里添加如下代码.

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑protectedvoidPage_Load(objectsender,EventArgse)

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑{

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑//下面两句应该放在网站刚刚启动时加载,并放在一个静态方法里方便调用

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑log4net.Config.XmlConfigurator.ConfigureAndWatch(newSystem.IO.FileInfo(Server.MapPath("Log4Net_AX.config")));

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑ILoglogAX=LogManager.GetLogger("loggerAX");

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑//写日志

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑logAX.Error("ErrorAX");

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑logAX.Info("InfoAX");

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑}

F5,在项目目录下找到Log文件夹的AX.txt ,这个就是刚刚生成的日志文件.

【写日志的原则】

Ⅰ.在catch后,把异常写入日志.

Ⅱ.在调用第三方控件的开始和结束处.

Ⅲ.在连接数据库的开始结束处.

Ⅳ.除非必要,不要在循环体中加入日志,否则一旦出问题可能导致日志暴增.

Ⅴ.在自己认为很重要的逻辑处写入日志.

【注意】

发现有重要问题时最好用邮件日志,但不要指望上面的邮件配置节能发日志.

要使用能用的smtp服务器,163的只有部分用户能

用.我的就不能用,很是郁闷.

要合理配置下列参数.

Ⅰ.日志文件的大小

Ⅱ.备份的日志名样式,最好时间精确到分---------------------------------------------------------------------------------------------------------------------------------------

因为工作中有要用到Log记录,找到一篇不错的文章,就转了过来。

一 Log4net简介

Log4net是基于.net开发的一款非常著名的记录日志开源组件。他最早是2001年7月由NeoWorks Limited启动的项目,基本的框架源于另外的一个非常著名的姐妹组件-log4j。Log4net记录日志的功能非常强大。它可以将日志分不同的等级,比不同的样式,将日志输出到不同的媒介。

Log4net可以从http://logging.apache.org/log4net/downloads.html网站下载最新版本。

二 Log4net核心组成

Log4net主要由五个部分组成,分别为Logger,Appenders, Filters, Layouts 和Object Renders。

一)Logger(日志)

1. 记录日志的分类:

Log4net能够以多种方式输出日志。支持的日志输出常用的主要媒介有数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite,控制台,文件,事件日志(可以用事件查看器查看)和邮件等多种方式。

2. 日志的级别

Log4net支持多种级别的日志。优先级从高到低依次排列如下:

FATAL > ERROR > WARN > INFO > DEBUG

此外还有ALL(允许所有的日志请求)和OFF(拒绝所有的日志请求)这两种特殊的级别。

二)Appenders

Appenders决定日志输出的方式。

Appenders必须实现log4net.Appenders.IAppender接口。

Log4net目前支持的输出方式包括:

1 AdoNetAppender

将日志记录到数据库中。可以采用SQL和存储过程两种方式。

2 AnsiColorTerminalAppender

在ANSI 窗口终端写下高亮度的日志事件。

3 AspNetTraceAppender

能用asp.net中Trace的方式查看记录的日志。

4 BufferingForwardingAppender

在输出到子Appenders之前先缓存日志事件。

5 ConsoleAppender

将日志输出到控制台。

6 EventLogAppender

将日志写到Windows Event Log.

7 FileAppender

将日志写到文件中。

8 LocalSyslogAppender

将日志写到local syslog service (仅用于UNIX环境下).

9 MemoryAppender

将日志存到内存缓冲区。

10 NetSendAppender

将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。

11 RemoteSyslogAppender

通过UDP网络协议将日志写到Remote syslog service。

12 RemotingAppender

通过.NET Remoting将日志写到远程接收端。

13 RollingFileAppender

将日志以回滚文件的形式写到文件中。

14 SmtpAppender

将日志写到邮件中。

15 TraceAppender

将日志写到.NET trace 系统。

16 UdpAppender

将日志connectionless UDP datagrams的形式送到远程宿主或以UdpClient的形式广播。

三)Filters

Appender对象将日志以缺省的方式传到输出流,然后Filter可以按照不同的标准控制日志的输出。Filter可以再配置文件中配置。最简单的形式是在appender中写明一个Threshold.这样只有级别大于或等于此Threshold的日志才被记录。

Filters必须实现log4net.Filters.IFilter接口。

四)Layouts

Layouts控制日志显示的格式样式。日志的显示格式如下:

"%timestamp [%thread] %-5level %logger - %message%newline"

Timestamp: 表示程序已经开始执行的时间。 单位[毫秒]。

Thread:执行当前代码的线程。

Level:日志的级别。

Logger:日志相关请求的名称。

Message: 日志消息。

Layouts还可以控制日志的输出样式,比如以普通形式或以xml等形式输出。

五)Object Renderers

这是很重要的一项,log4net将按照用户定义的标准输出日志消息。

Object Renders必须实现log4net.ObjectRenderer.IObjectRenerer接口。

三 如何在项目中使用log4net

下面有个基于控制台的demo,举例描述了log4net怎么用于输出日志。

本例中,日志将会记录到文件,控制台,事件日至和Access数据库中。

一)主要代码:

1. 配置文件app.config

1<?xml version="1.0" encoding="utf-8" ?>

2<configuration>

3 <!-- Register a section handler for the log4net section -->

4 <configSections>

5 <section name="log4net" type="System.Configuration.IgnoreSectionHandler" />

6 </configSections>

7 <appSettings>

8 <!-- To enable internal log4net logging specify the following appSettings key -->

9 <!-- <add key="log4net.Internal.Debug" value="true"/> --></appSettings>

10 <!-- This section contains the log4net configuration settings -->

11 <log4net>

12 <!--定义输出到文件中-->

13 <appender name="LogFileAppender" type="log4net.Appender.FileAppender">

14 <!--定义文件存放位置-->

15 <file value="D:/log-file1.txt" />

16 <!-- Example using environment variables in params -->

17 <!-- <file value="${TMP}/log-file.txt" /> -->

18 <!--<sppendToFile value="true" />-->

19 <!-- An alternate output encoding can be specified -->

20 <!-- <encoding value="unicodeFFFE" /> -->

21 <layout type="log4net.Layout.PatternLayout">

22 <!--每条日志末尾的文字说明-->

23 <footer value="[Footer]--Test By Ring1981 " />

24 <!--输出格式-->

25 <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline" />

26 </layout>

27 </appender>

28 <!--定义输出到控制台命令行中-->

29 <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">

30 <layout type="log4net.Layout.PatternLayout">

31 <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />

32 </layout>

33 </appender>

34 <!--定义输出到windows事件中-->

35 <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">

36 <layout type="log4net.Layout.PatternLayout">

37 <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />

38 </layout>

39 </appender>

40 <!--定义输出到数据库中,这里举例输出到Access数据库中,数据库为D盘的access.mdb-->

41 <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">

42 <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/access.mdb" />

43 <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)" />

44 <!--定义各个参数-->

45 <parameter>

46 <parameterName value="@log_date" />

47 <dbType value="String" />

48 <size value="255" />

49 <layout type="log4net.Layout.PatternLayout">

50 <conversionPattern value="%date" />

51 </layout>

52 </parameter>

53 <parameter>

54 <parameterName value="@thread" />

55 <dbType value="String" />

56 <size value="255" />

57 <layout type="log4net.Layout.PatternLayout">

58 <conversionPattern value="%thread" />

59 </layout>

60 </parameter>

61 <parameter>

62 <parameterName value="@log_level" />

63 <dbType value="String" />

64 <size value="50" />

65 <layout type="log4net.Layout.PatternLayout">

66 <conversionPattern value="%level" />

67 </layout>

68 </parameter>

69 <parameter>

70 <parameterName value="@logger" />

71 <dbType value="String" />

72 <size value="255" />

73 <layout type="log4net.Layout.PatternLayout">

74 <conversionPattern value="%logger" />

75 </layout>

76 </parameter>

77 <parameter>

78 <parameterName value="@message" />

79 <dbType value="String" />

80 <size value="1024" />

81 <layout type="log4net.Layout.PatternLayout">

82 <conversionPattern value="%message" />

83 </layout>

84 </parameter>

85 </appender>

86 <!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。-->

87 <root>

88 <appender-ref ref="LogFileAppender" />

89 <appender-ref ref="ConsoleAppender" />

90 <appender-ref ref="EventLogAppender" />

91 <appender-ref ref="AdoNetAppender_Access" />

92 </root>

93 </log4net>

94</configuration>

2. LoggingExample.cs

1// Configure log4net using the .config file

2[assembly: log4net.Config.XmlConfigurator(Watch=true)]

3// This will cause log4net to look for a configuration file

4// called ConsoleApp.exe.config in the application base

5// directory (i.e. the directory containing ConsoleApp.exe)

6

7namespace ConsoleApp

8{

9 using System;

10

11 /**//// <summary>

12 /// Example of how to simply configure and use log4net

13 /// </summary>

14 public class LoggingExample

15 {

16 private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

17

18 public static void Main(string[] args)

19 {

20 log.Error("Error Acc");

21 log.Fatal("Fatle Acc");

22 System.Console.ReadLine();

23

24 }

25

26 }

27}

28

运行程序,日志就会以xml中定义的四种媒介形式输出。

场景:我想用log4net输出两个log文件,一个文件输出所有的log,例如debug,info,warn,error,fatal全部输出,

另外一个log文件只输出error级别的log。

困扰了一段时间,开始还以为没有这样的功能,仔细看log4.net的文档发现是可以的。

其他地方省略了,重点看红色标出部分。这样的话同一个地方写入LOG,就会根据不同的级别输出到不同的文件中。

下面是配置文件

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<log4net>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<root>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<levelvalue="DEBUG"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<appender-refref="RollingFileAppender"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<appender-refref="ErrorRollingFileAppender"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑</root>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<appendername="RollingFileAppender"type="log4net.Appender.RollingFileAppender">

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<filevalue="c:/log.txt"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<appendToFilevalue="true"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<rollingStylevalue="Size"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<maxSizeRollBackupsvalue="10"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<maximumFileSizevalue="100KB"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<staticLogFileNamevalue="true"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<layouttype="log4net.Layout.PatternLayout">

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<conversionPatternvalue="%date[%thread]%-5level[%rmsused]-%message%newline"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑</layout>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑</appender>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<appendername="ErrorRollingFileAppender"type="log4net.Appender.RollingFileAppender"LEVEL="ERROR">

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<filevalue="c:/errorlog.txt"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<appendToFilevalue="true"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<rollingStylevalue="Size"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<maxSizeRollBackupsvalue="10"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<maximumFileSizevalue="1024KB"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<staticLogFileNamevalue="true"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<layouttype="log4net.Layout.PatternLayout">

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<conversionPatternvalue="%date[%thread]%-5level[%logger][%property{NDC}]-%message%newline"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑</layout>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<filtertype="log4net.Filter.LevelRangeFilter">

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<paramname="LevelMin"value="ERROR"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑<paramname="LevelMax"value="ERROR"/>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑</filter>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑</appender>

 日志记录组件[Log4net]详细介绍  - yorkguo - 人生绚丽 知者不惑</log4net>

分享到:
评论

相关推荐

    Log4net详细说明使用

    本文主要是介绍如何在Visual Studio2008中使用log4net快速创建系统日志,如何扩展以输出自定义字段。 2、一个简单的使用实例 第一步:在项目中添加对log4net.dll的引用,这里引用版本是1.2.10.0。 第二步:程序启动...

    Log4net使用

    Log4net使用源代码 详细介绍log4net配置以及调用

    log4net详细介绍

    Log4NET的使用。

    log4j使用笔记

    1.该笔记中详细的介绍了log4j的作用和优势、具体地讲解了log4j的使用步骤和详细配置。 2.深入的说明了log4j在项目中的重要地位以及给项目带来的影响,同时说明了log4j的优化。 3.该笔记从log4j的简介/入门开始介绍,到...

    非常完善的Log4net详细说明.doc

    log4net是.Net下一个非常优秀的开源日志记录组件。log4net记录日志的功能非常强大。它可以将日志分不同的等级,以...本文主要是介绍如何在Visual Studio2008中使用log4net快速创建系统日志,如何扩展以输出自定义字段。

    Log4j使用实例

    详细介绍Log4j使用实例

    log4j使用详解 j2EE

    很详细的介绍了log4j的使用方法和用例 很详细的介绍了log4j的使用方法和用例 很详细的介绍了log4j的使用方法和用例

    log4j使用详解包括ppt和文档

    log4j的详细使用,附带例子! 很好的使用例子

    log4j2-所需jar包+配置详解(详细)

    关于配置文件的名称以及在项目中的存放位置  log4j 2.x版本不再支持像1.x中的....如果本地要测试,可以把log4j2-test.xml放到classpath,而正式环境使用log4j2.xml,则在打包部署的时候不要打包log4j2-test.xml即可。

    Log4cpp使用档案

    本文详细的介绍了Log4cpp的各种用法,包括编译、应用、配置。同时,作者提供了自己的定制版本,增强了Log4cpp的功能。也提供了Demo与二次封装的“简易”类。文章末属提供了相关源码的下载地址。 本文编写时间略显...

    Log4j使用教程.pdf

    Log4j使用教程.pdf,详细介绍了log4j的使用方法和配置

    Log4Net.7z

    Log4Net配置文件注释详细介绍了常用Log4Net的强大功能,并生成对应的接口类(Log4NetHelper),方便用户使用; 对应框架是.Net 4.5.1,测试代码可以运行,生成的Log文件在Exe同一个目录下。

    log4j使用方法详细介绍

    log4j是一个非常强大的log记录软件,讲解在项目中如何使log4j。

    log4j使用与java中log4j记录日志如何写入数据库

    详细介绍了log4j的使用方法,介绍了java中日志记录如何写入数据库,对于初学者来说很不错的一个文档

    Log4Net打印日志文件

    Log4net是一个很好的打印日志的工作,里面有比较详细的介绍,都是从网上搜积到的

    log4jxml详细分析 例子全

    log4jxml 详细介绍 和 对比举例!

    log4cplus 源码(C++编写的开源的日志系统)

    本文介绍了log4cplus基本概念,以及如何安装,配置,下一篇将通过例子介绍如何使用log4cplus。 (二) 本文介绍了使用log4cplus有六个步骤,并提供了一些例子引导你了解log4cplus的基本使用。 ### 基本使用 ###...

    log4cpp源码完整解析

    完整分析了log4cpp的整体架构,详细介绍了log4cpp的这个重要组件的实现分析了log4cpp内部所使用的设计模式。介绍了log4cpp中的Category的完整实现细节,介绍了所有的Layout及其子类的具体实现。也详细介绍了比较常用...

    log4j 非常详细的介绍

    简单的说log4j就是帮助开发人员进行日志输出管理的API类库。它最重要的特点就 可以配置文件灵活的设置日志信息的优先级、日志信息的输出目的地以及日志信息的输出格式。

    log4配置详解

    文件里面详细的介绍了log4的配置,不过这只是配置的介绍没有关于log4的介绍

Global site tag (gtag.js) - Google Analytics