Log4Net主页: http://logging.apache.org/log4net/,下载Log4Net
Log4Net主要由Logger, Appender, Filter, Layout 4个组件构成, 一般情况下后3个组件在配置文件中配置.
Logger
负责产生日志消息,可以在代码中调用
Appender
负责向存储介质中追加日志, 一般在配置文件中配置,根据保存日志介质的不同Appender有多种, 比如:AdoNetAppender,EventLogAppender,RollingFileAppender等.参见: http://logging.apache.org/log4net/release/config-examples. HTML.
Filter
负责过滤日志, 一般和Appender联合使用,在配置文件中配置
Layout
负责日志消息的格式, 一般和Appender联合使用,在配置文件中配置。
使用步骤
1.给web项目添加引用log4net.dll
2. 在web.config的configuration(最顶层)下加 (网上文章是把log4net放到configSections前面,但是我编译不通过)
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<root></root>
<logger name="Test">
<level value="DEBUG" />
<appender-ref ref="rollingFile" />
</logger>
<appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net" >
<param name="File" type="" value="log/" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyyMMdd" />
<param name="StaticLogFileName" value="false" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
<param name="Header" value=" ----------------------header-------------------------- " />
<param name="Footer" value=" ----------------------footer-------------------------- " />
</layout>
</appender>
</log4net>
Logger的Level属性可以设以下值,由高到低为OFF,FATAL, ERROR,WARN,INFO,DEBUG,ALL. 高于设定值方法都能写入日志, Off所有的写入方法都不写到日志里,ALL则相反。例如当我们设成Info时,logger.Debug就会被忽略而不写入文件,但是FATAL, ERROR,WARN,INFO会被写入,因为他们等级高于INFO;
3. 在Global.ascx(如果项目中没有,则新建)中的Application_Start方法中加入
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
log4net.Config. XMLConfigurator.Configure();
}
4.配置<log4net>标签中的内容
<log4net>
<root>
<!--
<level value="ALL" />
<appender-ref ref="rootFile" />
-->
</root>
<logger name="Test">
<level value="DEBUG" />
<appender-ref ref="rollingFile" />
</logger>
<appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net" >
<param name="File" type="" value="log/" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyyMMdd" />
<param name="StaticLogFileName" value="false" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
<param name="Header" value=" ----------------------header-------------------------- " />
<param name="Footer" value=" ----------------------footer-------------------------- " />
</layout>
</appender>
</log4net>
log4net标签的框架如下, 该标签下有root, logger, appender等标签
root标签
所有的logger都从root继承, root本身也是一个logger
logger标签
每个logger标签代表一个logger,appender-ref表示该logger产生的日志消息传递给哪个appender,一个logger可以把相同的消息传递给多个appender记录
appender标签
每个appender表示一个日志的存储位置,name不能和type一样
类型是RollingFileAppender
<appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net" >
<param name="File" value="log" /> 文件名以log为开头
<param name="AppendToFile" value="true" /> 是否是向文件中追加日志
<param name="RollingStyle" value="Date" /> 日志根据日期滚动
<param name="DatePattern" value="yyyyMMdd" /> 日志文件名格式为: log20071120
<param name="StaticLogFileName" value="false" /> 日志文件名是否是固定不变的
日志消息的格式, 表示换行
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
<param name="Header" value=" ----------------------header-------------------------- " />
<param name="Footer" value=" ----------------------footer-------------------------- " />
</layout>
</appender>
消息模式
%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:输出语句所在的文件名
%-数字:表示该项的最小长度,如果不够,则用空格填充
5. 在代码中调用Logger
using System;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI. HTMLControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using log4net;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ILog LOGGER = LogManager.GetLogger("Test");
LOGGER.Debug("测试信息");
}
}
最后,可以在根目录下找到日志对应日志文件。
(二)使用单独的配置文件,不放在web.config里
1.新建一website.
2.添加一个类库工程,取名LogNet
3. 为LogNet工程引用log4net.dll
4. 双击打开AssemblyInfo.cs在最后添加
[assembly: log4net.Config.XMLConfigurator(ConfigFile = "log4net.config", Watch = true)]5. 为LogNet工程添加一个logBLL.cs文件,我们把日志调用封装到这一层
using System;
using System.Collections.Generic;
using System.Text;
namespace LogNet
{
public class LogBLL
{
public static void debug(string message)
{
log4net.ILog log = log4net.LogManager.GetLogger("Test");
if (log.IsDebugEnabled)
{
log.Debug(message);
}
log = null;
}
public static void error(string message)
{
log4net.ILog log = log4net.LogManager.GetLogger("Test");
if (log.IsErrorEnabled)
{
log.Error(message);
}
log = null;
}
public static void fatal(string message)
{
log4net.ILog log = log4net.LogManager.GetLogger("Test");
if (log.IsFatalEnabled)
{
log.Fatal(message);
}
log = null;
}
public static void info(string message)
{
log4net.ILog log = log4net.LogManager.GetLogger("Test");
if (log.IsInfoEnabled)
{
log.Info(message);
}
log = null;
}
public static void warn(string message)
{
log4net.ILog log = log4net.LogManager.GetLogger("Test");
if (log.IsWarnEnabled)
{
log.Warn(message);
}
log = null;
}
}
}
6.在web站点根目录下添加一个log4net.config文件,内容如下
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<log4net>
<root>
<!--
<level value="ALL" />
<appender-ref ref="rootFile" />
-->
</root>
<logger name="Test">
<level value="DEBUG" />
<appender-ref ref="rollingFile" />
</logger>
<appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net" >
<param name="File" type="" value="log/" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyyMMdd" />
<param name="StaticLogFileName" value="false" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
<param name="Header" value=" ----------------------header-------------- " />
<param name="Footer" value=" ----------------------footer-------------- " />
</layout>
</appender>
</log4net>
</configuration>
7.编译LogNet工程
8.为web引入LogNet工程bin目录下的LogNet.dll
9.在default.ASPx.cs里写入如下代码
using System;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HTMLControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using LogNet; //引用程序集
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
LogBLL.debug("测试信息");
}
}
}
10.运行,将在web目录下的log目录下看到日志文件
----------------------header--------------------------
2007-11-24 12:16:24,171 [4] DEBUG LiveBookings - 测试信息
2007-11-24 12:16:46,312 [4] DEBUG LiveBookings - 测试信息
----------------------footer--------------------------