Log4Net ,.net和SQL Server的完美结合

参考郑大哥的这篇文章,http://www.cnblogs.com/zhengyun_ustc/archive/2005/07/19/196049.html
不过,我在我这个项目中,具体使用的方法有点不同。
这个学生处学生信息管理系统,业务日志比较简单,其实并不需要使用log4net。所以在这个项目中,只用log4net来记录错误日志。

1.建立配置文件。以下配置,是把信息记录到数据库和一个以当前日期为名字的日志txt文件。从数据库的insert语句就可以看出数据库的
ContractedBlock.gif ExpandedBlockStart.gif Code
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  
<configSections>
        
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
    
</configSections>
  
<log4net>
    
<appender name="ADONetAppender" type="log4net.Appender.AdoNetAppender">
      
<bufferSize value="1" />
      
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      
<connectionString value="server=codebase;database=StuDepartmentOA;uid=sadis;pwd=123;timeout=300;" />
      
<commandText value="INSERT INTO ErrLog ([Time],[errLevel],[Info],[Exception]) VALUES (@time, @level, @info, @exception)" />
      
<parameter>
        
<parameterName value="@time" />
        
<dbType value="DateTime" />
        
<layout type="log4net.Layout.RawTimeStampLayout" />
      
</parameter>
      
<parameter>
        
<parameterName value="@level" />
        
<dbType value="String" />
        
<size value="8" />
        
<layout type="log4net.Layout.PatternLayout">
          
<conversionPattern value="%p" />
        
</layout>
      
</parameter>
      
<parameter>
        
<parameterName value="@info" />
        
<dbType value="String" />
        
<size value="200" />
        
<layout type="log4net.Layout.PatternLayout">
          
<conversionPattern value="%m" />
        
</layout>
      
</parameter>
      
<parameter>
        
<parameterName value="@exception" />
        
<dbType value="String" />
        
<size value="1000" />
        
<layout type="log4net.Layout.PatternLayout">
          
<conversionPattern value="%exception" />
        
</layout>
      
</parameter>
    
</appender>
    
<appender name="FileErrLogAppender" type="log4net.Appender.RollingFileAppender">
      
<!--日志文件的存储路径-->
      
<file value="bin\Log\"/>
      
<appendToFile value="true"/>
      
<rollingStyle value="Date"/>
      
<datePattern value="yyyy-MM-dd.LOG"/>
      
<!--根据日期,定义文件名-->
      
<staticLogFileName value="false"/>
      
<!--日志文件输出格式-->
      
<layout  type="log4net.Layout.PatternLayout">
        
<param name="Header" value="[Header]"/>
        
<param name="Footer" value="[Footer]"/>
        
<ConversionPattern value="%nTime: %d %n Level: %level   Info: %message %nException: %exception"/>
      
</layout>
    
</appender>

    
<!-- Setup the root category, add the appenders and set the default level -->
    
<root>
      
<level value="WARN"/>
      
<level value="INFO"/>
      
<level value="DEBUG"/>
    
</root>
    
<!-- Specify the level for some specific categories -->
    
<logger name="logger">
      
<level value="WARN"/>
      
<level value="INFO"/>
      
<level value="DEBUG"/>
      
<appender-ref ref="FileErrLogAppender"/>  
      
<appender-ref ref="ADONetAppender" />
    
</logger>

  
</log4net>
</configuration>

对应的数据库表:
ContractedBlock.gif ExpandedBlockStart.gif Code
USE [StuDepartmentOA]
GO
/****** 对象:  Table [dbo].[ErrLog]    脚本日期: 08/16/2009 10:09:31 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[ErrLog](
    
[ID] [int] IDENTITY(1,1NOT NULL,
    
[time] [datetime] NOT NULL,
    
[errLevel] [varchar](8) COLLATE Chinese_PRC_CI_AS NOT NULL,
    
[info] [nvarchar](200) COLLATE Chinese_PRC_CI_AS NOT NULL,
    
[exception] [varchar](1000) COLLATE Chinese_PRC_CI_AS NULL,
 
CONSTRAINT [PK_errLog] PRIMARY KEY CLUSTERED 
(
    
[ID] ASC
)
WITH (IGNORE_DUP_KEY = OFFON [PRIMARY]
ON [PRIMARY]

GO
SET ANSI_PADDING OFF

2.把配置文件放到Web目录下,跟web.config同一层。

3.建立globe.asax文件,在Application_Start中加入
log4net.Config.XmlConfigurator.ConfigureAndWatch( new  System.IO.FileInfo(Server.MapPath( " ~ " +   @" \log4net.config " ));

4.再加入相应的引用。然后如果项目中有其他类库,那么再在对应用到的类库中加入引用。
(!!这里需要注意的是,如果用了NHibernate,就需要注意了,必须加入对应版本的log4net,不然会出错。我本来加了一个1.2.9的log4net,但NHibernate默认用附带的1.2.10,运行时就报错了)

5.实际使用:
ContractedBlock.gif ExpandedBlockStart.gif Code
using System;
using log4net;
namespace DAL
{
    
/// <summary>
    
/// LogHelper 的摘要说明
    
/// </summary>
    public class LogHelper
    {
        
private static ILog Logger = log4net.LogManager.GetLogger("logger");
        
public static void Debug(string message, Exception ex)
        {
            
if(Logger.IsDebugEnabled)
            {
                Logger.Debug(message, ex);
            }
        }
        
public static void Debug(string message)
        {
            
if (Logger.IsDebugEnabled)
            {
                Logger.Debug(message);
            }
        }
        
public static void Info(string message, Exception ex)
        {
            
if(Logger.IsInfoEnabled)
            {
                Logger.Info(message, ex);
            }
        }
        
public static void Info(string message)
        {
            
if (Logger.IsInfoEnabled)
            {
                Logger.Info(message);
            }
        }
        
public static void Error(string message, Exception ex)
        {
            
if (Logger.IsErrorEnabled)
            {
                Logger.Error(message,ex);
            }
        }
        
public static void Error(string message)
        {
            
if (Logger.IsErrorEnabled)
            {
                Logger.Error(message);
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值