log4net.mdb" />
--定义各个参数-->
--定义日志的输出媒介,下面定义日志以四种方式输出。
也可以下面的按照一种类型或其他类型输出。
-->
--文件形式记录日志-->
--控制台控制显示日志-->
--Windows事件日志-->
-- 如果不启用相应的日志记录,可以通过这种方式注释掉
-->
程序文件:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using log4net;
//注意下面的语句一定要加上,指定log4net使用.config文件来读取配置信息
//如果是WinForm(假定程序为MyDemo.exe,则需要一个MyDemo.exe.config文件)
//如果是WebForm,则从web.config中读取相关信息
[assembly:
log4net.Config.XmlConfigurator(Watch = true)]
namespace Log4NetDemo
{
///
/// 说明:
本程序演示如何利用log4net记录程序日志信息。
log4net是一个功能著名的开源日志记录组件。
/// 利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库中(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)。
/// 下面的例子展示了如何利用log4net记录日志
/// 作者:
周公
/// 时间:
2008-3-26
/// 首发地址:
///
public class MainClass
{
public static void Main(string[] args)
{
//Application.Run(new MainForm());
//创建日志记录组件实例
ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
//记录错误日志
log.Error("error",new Exception("发生了一个异常"));
//记录严重错误
log.Fatal("fatal",new Exception("发生了一个致命错误"));
//记录一般信息
log.Info("info");
//记录调试信息
log.Debug("debug");
//记录警告信息
log.Warn("warn");
Console.WriteLine("日志记录完毕。
");
Console.Read();
}
}
}
运行结果:
控制台上的输出
日志文件内容
首先说明一点的是,log4net解决的问题是提供一个记录日志的框架,它提供了向多种目标写入的实现,比如利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库(包括MSSQLServer,Access,Oracle9i,Oracle8i,DB2,SQLite)中,一般来说我们只需要提供一个描述性的字符串,然后log4net就会自动提供有关运行时的一些信息。
Log4Net的版本仍是1.2.10(2008年我写博文的时候也是这个版本),有.NET1.0和.NET1.1和.NET2.0版本,如果有正在使用高于.NET2.0开发的也不用担心,可以直接引用这个类库,像在.NET2.0中开发一样,它的网址是:
http:
//logging.apache.org/log4net/
关于在Web中支持的问题
在我们开发项目时都会使用到config文件,可以在config文件中配置log4net。
这一点Web项目和WinForm项目都是一样的。
需要注意的是,因为在Web项目中一般以较低权限的角色来运行Web项目的,所以在使用文件型日志时要注意不要放在本项目根文件夹之外。
在config文件中的配置
要使用log4net,首先要在config文件的节点中增加配置(如果没有这个节点请手动增加),如下:
viewplaincopytoclipboardprint?
1.
2.
3.
除此之外,还要在顶级节点下增加子节点。
在节点下就可以增加子节点,每个子节点代表一种记录日志的方式(仅在这里配置了不代表启用了)。
具体说来有如下Appender:
AdoNetAppender:
利用ADO.NET记录到数据库的日志。
AnsiColorTerminalAppender:
在ANSI窗口终端写下高亮度的日志事件。
AspNetTraceAppender:
能用中Trace的方式查看记录的日志。
BufferingForwardingAppender:
在输出到子Appenders之前先缓存日志事件。
ConsoleAppender:
将日志输出到控制台。
EventLogAppender:
将日志写到WindowsEventLog.
FileAppender:
将日志写到文件中。
LocalSyslogAppender:
将日志写到localsyslogservice(仅用于UNIX环境下).
MemoryAppender:
将日志存到内存缓冲区。
NetSendAppender:
将日志输出到WindowsMessengerservice.这些日志信息将在用户终端的对话框中显示。
RemoteSyslogAppender:
通过UDP网络协议将日志写到Remotesyslogservice。
RemotingAppender:
通过.NETRemoting将日志写到远程接收端。
RollingFileAppender:
将日志以回滚文件的形式写到文件中。
SmtpAppender:
将日志写到邮件中。
TraceAppender:
将日志写到.NETtrace系统。
UdpAppender:
将日志connectionlessUDPdatagrams的形式送到远程宿主或以UdpClient的形式广播。
关于使用log4net中可能会使用到的一些参数
%m(message):
输出的日志消息,如ILog.Debug(…)输出的一条消息
%n(newline):
换行
%d(datetime):
输出当前语句运行的时刻
%r(runtime):
输出程序从运行到执行到当前语句时消耗的毫秒数
%t(threadid):
当前语句所在的线程ID
%p(priority):
日志的当前优先级别,即DEBUG、INFO、WARN…等
%c(class):
当前日志对象的名称,例如:
%f(file):
输出语句所在的文件名。
%l(line):
输出语句所在的行号。
%数字:
表示该项的最小长度,如果不够,则用空格填充,如“%-5level”表示level的最小宽度是5个字符,如果实际长度不够5个字符则以空格填充。
下面以一个实际的例子来说明问题,比如在配置中有“%date[%thread](%file:
%line)%-5level%logger[%property{NDC}]-%message%newline”,那么实际的日志中会是如下格式:
“记录时间:
2010-11-1716:
16:
36,561线程ID:
[9]日志级别:
文件:
所在行ERROR出错类:
Log4NetDemo.Programproperty:
[(null)]-错误描述:
error
System.Exception:
在这里发生了一个异常,ErrorNumber:
2036084948”
关于对数据库的支持
前面已经说过,log4net是支持包括MSSQLServer,Access,Oracle9i,Oracle8i,DB2,SQLite在内的数据库的,如果是文件型数据库(如Access或SQLite)的话就需要指定数据库文件的位置(在Web中最好指定在有读写权限的文件夹下,并且实现创建好表),如果是网络数据库就需要指定正确的数据库连接字符串。
比如要记录到Oracle数据库中,在配置文件中可以增加一个节点,配置如下:
1.
2.
3.
4. log_date, :
thread, :
log_level, :
logger, :
message)" />
5.
6.
7. log_date" />
8.
9.
10.
11.
12. thread" />
13.
14.
15.
16.
17.
18.
19.
20. log_level" />
21.
22.
23.
24.
25.
26.
27.
28. logger" />
29.
30.
31.
32.
33.
34.
35.