Log4net日志记录组件-学习心得
2010-12-02 00:41
363 查看
Log4net
是基于
.net
开发的一款非常著名的记录日志开源组件。他最早是
2001
年
7
月由
NeoWorks Limited
启动的项目,基本的框架源于另外的一个非常著名的姐妹组件-
log4j
。
Log4net
记录日志的功能非常强大。
本文示例源代码或素材下载
最近正在做一个大型网站,网站已经基本成型,到了后期维护和修改的阶段,经常会遇到某些页面打不开的状态,出现了未知的错误,回头想想,还是日志做的不详细,跟踪的不彻底,在网上搜了搜,找到了一个不错的关于
.net
日志记录组件的文章,也是博客园的用户,也转载下,好好学习学习,然后应用到我的网站上。
一
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
Code
<?
xml
version
=
"1.0
"
encoding
=
"utf-8
" ?>
<
configuration
>
<!--
Register a section handler for the log4net section
-->
<
configSections
>
<
section
name
=
"log4net
"
type
=
"System.Configuration.IgnoreSectionHandler
" />
<
appSettings
>
<!--
To enable internal log4net logging specify the following
appSettings key
-->
<!--
<add key="log4net.Internal.Debug"
value="true"/>
-->
</
appSettings
>
<!--
This section contains the log4net configuration settings
-->
<
log4net
>
<!--
定义输出到文件中
-->
<
appender
name
=
"LogFileAppender
"
type
=
"log4net.Appender.FileAppender
">
<!--
定义文件存放位置
-->
<
file
value
=
"D:log-file1.txt
" />
<!--
Example using environment variables in params
-->
<!--
<file value="${TMP}log-file.txt" />
-->
<!--
<sppendToFile value="true" />
-->
<!--
An alternate output encoding can be specified
-->
<!--
<encoding value="unicodeFFFE" />
-->
<
layout
type
=
"log4net.Layout.PatternLayout
">
<!--
每条日志末尾的文字说明
-->
<
footer
value
=
"[Footer]--Test By Ring1981
" />
<!--
输出格式
-->
<
conversionPattern
value
=
"%date [%thread] %-5level %logger [%ndc]
<
%property{auth}
>
- %message%newline
" />
</
layout
>
</
appender
>
<!--
定义输出到控制台命令行中
-->
<
appender
name
=
"ConsoleAppender
"
type
=
"log4net.Appender.ConsoleAppender
">
<
layout
type
=
"log4net.Layout.PatternLayout
">
<
conversionPattern
value
=
"%date [%thread] %-5level %logger [%property{NDC}] -
%message%newline
" />
</
layout
>
</
appender
>
<!--
定义输出到windows
事件中
-->
<
appender
name
=
"EventLogAppender
"
type
=
"log4net.Appender.EventLogAppender
">
<
layout
type
=
"log4net.Layout.PatternLayout
">
<
conversionPattern
value
=
"%date [%thread] %-5level %logger [%property{NDC}] - %message%newline
" />
</
layout
>
</
appender
>
<!--
定义输出到数据库中,这里举例输出到Access
数据库中,数据库为D
盘的access.mdb
-->
<
appender
name
=
"AdoNetAppender_Access
"
type
=
"log4net.Appender.AdoNetAppender
">
<
connectionString
value
=
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:access.mdb
" />
<
commandText
value
=
"INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message])
VALUES (@log_date, @thread, @log_level, @logger, @message)
" />
<!--
定义各个参数
-->
<
parameter
>
<
parameterName
value
=
"@log_date
" />
<
dbType
value
=
"String
" />
<
size
value
=
"255
" />
<
layout
type
=
"log4net.Layout.PatternLayout
">
<
conversionPattern
value
=
"%date
" />
</
layout
>
</
parameter
>
<
parameter
>
<
parameterName
value
=
"@thread
" />
<
dbType
value
=
"String
" />
<
size
value
=
"255
" />
<
layout
type
=
"log4net.Layout.PatternLayout
">
<
conversionPattern
value
=
"%thread
" />
</
layout
>
</
parameter
>
<
parameter
>
<
parameterName
value
=
"@log_level
" />
<
dbType
value
=
"String
" />
<
size
value
=
"50
" />
<
layout
type
=
"log4net.Layout.PatternLayout
">
<
conversionPattern
value
=
"%level
" />
</
layout
>
</
parameter
>
<
parameter
>
<
parameterName
value
=
"@logger
" />
<
dbType
value
=
"String
" />
<
size
value
=
"255
" />
<
layout
type
=
"log4net.Layout.PatternLayout
">
<
conversionPattern
value
=
"%logger
" />
</
layout
>
</
parameter
>
<
parameter
>
<
parameterName
value
=
"@message
" />
<
dbType
value
=
"String
" />
<
size
value
=
"1024
" />
<
layout
type
=
"log4net.Layout.PatternLayout
">
<
conversionPattern
value
=
"%message
" />
</
layout
>
</
parameter
>
</
appender
>
<!--
定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。
-->
<
root
>
<
appender-ref
ref
=
"LogFileAppender
" />
<
appender-ref
ref
=
"ConsoleAppender
" />
<
appender-ref
ref
=
"EventLogAppender
" />
<
appender-ref
ref
=
"AdoNetAppender_Access
"
/>
</
root
>
</
log4net
>
</
configuration
>
2.LoggingExample.cs
Code
//Configurelog4netusingthe.configfile
[assembly
:log4net.Config.XmlConfigurator(Watch=true
)]
//Thiswillcauselog4nettolookforaconfigurationfile
//calledConsoleApp.exe.configintheapplicationbase
//directory(i.e.thedirectorycontainingConsoleApp.exe)
namespaceConsoleApp
{
usingSystem;
/**/
///<summary>
///
Exampleofhowtosimplyconfigureanduselog4net
///</summary>
publicclassLoggingExample
{
privatestaticreadonlylog4net.ILoglog=log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
publicstaticvoidMain(string
[]args)
{
log.Error("ErrorAcc"
);
log.Fatal("FatleAcc"
);
System.Console.ReadLine();
}
}
}
运行程序,日志就会以
xml
中定义的四种媒介形式输出。
来自:http://tech.ddvip.com/2008-11/122705683693357_3.html
是基于
.net
开发的一款非常著名的记录日志开源组件。他最早是
2001
年
7
月由
NeoWorks Limited
启动的项目,基本的框架源于另外的一个非常著名的姐妹组件-
log4j
。
Log4net
记录日志的功能非常强大。
本文示例源代码或素材下载
最近正在做一个大型网站,网站已经基本成型,到了后期维护和修改的阶段,经常会遇到某些页面打不开的状态,出现了未知的错误,回头想想,还是日志做的不详细,跟踪的不彻底,在网上搜了搜,找到了一个不错的关于
.net
日志记录组件的文章,也是博客园的用户,也转载下,好好学习学习,然后应用到我的网站上。
一
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
Code
<?
xml
version
=
"1.0
"
encoding
=
"utf-8
" ?>
<
configuration
>
<!--
Register a section handler for the log4net section
-->
<
configSections
>
<
section
name
=
"log4net
"
type
=
"System.Configuration.IgnoreSectionHandler
" />
<
appSettings
>
<!--
To enable internal log4net logging specify the following
appSettings key
-->
<!--
<add key="log4net.Internal.Debug"
value="true"/>
-->
</
appSettings
>
<!--
This section contains the log4net configuration settings
-->
<
log4net
>
<!--
定义输出到文件中
-->
<
appender
name
=
"LogFileAppender
"
type
=
"log4net.Appender.FileAppender
">
<!--
定义文件存放位置
-->
<
file
value
=
"D:log-file1.txt
" />
<!--
Example using environment variables in params
-->
<!--
<file value="${TMP}log-file.txt" />
-->
<!--
<sppendToFile value="true" />
-->
<!--
An alternate output encoding can be specified
-->
<!--
<encoding value="unicodeFFFE" />
-->
<
layout
type
=
"log4net.Layout.PatternLayout
">
<!--
每条日志末尾的文字说明
-->
<
footer
value
=
"[Footer]--Test By Ring1981
" />
<!--
输出格式
-->
<
conversionPattern
value
=
"%date [%thread] %-5level %logger [%ndc]
<
%property{auth}
>
- %message%newline
" />
</
layout
>
</
appender
>
<!--
定义输出到控制台命令行中
-->
<
appender
name
=
"ConsoleAppender
"
type
=
"log4net.Appender.ConsoleAppender
">
<
layout
type
=
"log4net.Layout.PatternLayout
">
<
conversionPattern
value
=
"%date [%thread] %-5level %logger [%property{NDC}] -
%message%newline
" />
</
layout
>
</
appender
>
<!--
定义输出到windows
事件中
-->
<
appender
name
=
"EventLogAppender
"
type
=
"log4net.Appender.EventLogAppender
">
<
layout
type
=
"log4net.Layout.PatternLayout
">
<
conversionPattern
value
=
"%date [%thread] %-5level %logger [%property{NDC}] - %message%newline
" />
</
layout
>
</
appender
>
<!--
定义输出到数据库中,这里举例输出到Access
数据库中,数据库为D
盘的access.mdb
-->
<
appender
name
=
"AdoNetAppender_Access
"
type
=
"log4net.Appender.AdoNetAppender
">
<
connectionString
value
=
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:access.mdb
" />
<
commandText
value
=
"INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message])
VALUES (@log_date, @thread, @log_level, @logger, @message)
" />
<!--
定义各个参数
-->
<
parameter
>
<
parameterName
value
=
"@log_date
" />
<
dbType
value
=
"String
" />
<
size
value
=
"255
" />
<
layout
type
=
"log4net.Layout.PatternLayout
">
<
conversionPattern
value
=
"%date
" />
</
layout
>
</
parameter
>
<
parameter
>
<
parameterName
value
=
"@thread
" />
<
dbType
value
=
"String
" />
<
size
value
=
"255
" />
<
layout
type
=
"log4net.Layout.PatternLayout
">
<
conversionPattern
value
=
"%thread
" />
</
layout
>
</
parameter
>
<
parameter
>
<
parameterName
value
=
"@log_level
" />
<
dbType
value
=
"String
" />
<
size
value
=
"50
" />
<
layout
type
=
"log4net.Layout.PatternLayout
">
<
conversionPattern
value
=
"%level
" />
</
layout
>
</
parameter
>
<
parameter
>
<
parameterName
value
=
"@logger
" />
<
dbType
value
=
"String
" />
<
size
value
=
"255
" />
<
layout
type
=
"log4net.Layout.PatternLayout
">
<
conversionPattern
value
=
"%logger
" />
</
layout
>
</
parameter
>
<
parameter
>
<
parameterName
value
=
"@message
" />
<
dbType
value
=
"String
" />
<
size
value
=
"1024
" />
<
layout
type
=
"log4net.Layout.PatternLayout
">
<
conversionPattern
value
=
"%message
" />
</
layout
>
</
parameter
>
</
appender
>
<!--
定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。
-->
<
root
>
<
appender-ref
ref
=
"LogFileAppender
" />
<
appender-ref
ref
=
"ConsoleAppender
" />
<
appender-ref
ref
=
"EventLogAppender
" />
<
appender-ref
ref
=
"AdoNetAppender_Access
"
/>
</
root
>
</
log4net
>
</
configuration
>
2.LoggingExample.cs
Code
//Configurelog4netusingthe.configfile
[assembly
:log4net.Config.XmlConfigurator(Watch=true
)]
//Thiswillcauselog4nettolookforaconfigurationfile
//calledConsoleApp.exe.configintheapplicationbase
//directory(i.e.thedirectorycontainingConsoleApp.exe)
namespaceConsoleApp
{
usingSystem;
/**/
///<summary>
///
Exampleofhowtosimplyconfigureanduselog4net
///</summary>
publicclassLoggingExample
{
privatestaticreadonlylog4net.ILoglog=log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
publicstaticvoidMain(string
[]args)
{
log.Error("ErrorAcc"
);
log.Fatal("FatleAcc"
);
System.Console.ReadLine();
}
}
}
运行程序,日志就会以
xml
中定义的四种媒介形式输出。
来自:http://tech.ddvip.com/2008-11/122705683693357_3.html
相关文章推荐
- Log4net日志记录组件-学习心得
- 日志记录组件[Log4net]详细介绍(转)
- Log4Net学习 记录操作日志
- 日志记录组件[Log4net]简介
- Log4net日志记录组件的使用步骤详解和下载
- 日志记录组件[Log4net]详细介绍(转)
- 日志记录组件[Log4net]
- 关于Log4Net日志记录组件的一点应用
- 日志记录组件[Log4net]详细介绍
- 利用Log4net组件记录日志
- 日志记录组件[Log4net]详细介绍
- log4net--不可多得的开源日志记录组件
- 日志记录组件[Log4net]详细介绍
- 日志记录组件[Log4net]详细介绍(转)
- MVC使用Log4Net进行错误日志记录学习笔记4
- 日志记录组件[Log4net]详细介绍
- 使用log4net组件记录系统日志
- 使用log4net组件记录系统日志
- 日志记录组件[Log4net]详细介绍(转)
- MVC使用Log4Net进行错误日志记录学习笔记4