asp.net利用log4net写入日志到SqlServer数据库

asp.net利用log4net写入日志到SqlServer数据库,Log4net是一个开源的错误日志记录项目,易用性强,源自log4j,品质值得信赖。 下面就我的安装部署log4net到MS sql server的经验与大家分享。

下载log4net的Dll文件并引入到项目中,在你的web主项目(比如MainWeb.csproj)添加对log4net.dll的引用,并在相应的Globall.cs文件中的Application_Start 事件中写入

protected     void   Application_Start(Object sender, EventArgs e)  
        { 
//  
            log4net.Config.XmlConfigurator.Configure(  new   System.IO.FileInfo(  " log4net.config "  )); 
        } 

 

在这个项目对应的Assembly.cs文件中添加一行

[assembly: log4net.Config.XmlConfigurator(ConfigFile  =    " log4net.config "  , Watch  =    true  )]  

 

这里有个地方需要注意

如果我的主项目是纯粹的代码分离后的aspx\ascx文件, 不含cs文件,那么中需要在饱含cs文件的项目(比如common.web.csproj)文件中添加这两行代码

举个例子

解决方案如下:

MySolution.Sln

       |-----common.Web.csproj(包含cs文件)

       |-----Business1.Web.csproj(包含cs文件,继承自common.Web.csproj)

       |-----Business********.Web.csproj(包含cs文件,继承自common.Web.csproj)

       |-----BusinessX.Web.csproj(包含cs文件,继承自common.Web.csproj)

    |-----MainWeb.csproj(不包含cs文件)

此时, 只需要在 common.Web.csproj 中做以上动作就可以了!其他项目只需要引用 dll即可。

 第三步:添加logn4net.confgi在主项目根目录下:与web.config同路径,之所以不写入web,config文件, 是因为这样可以单独修改调试部署,也就是非侵入式安装的思想。呵呵。

内容大概如下:

<? xml version="1.0" ?>   
< configuration >   
    
< configSections >   
        
< section  name ="log4net"  type ="log4net.Config.Log4NetConfigurationSectionHandler, log4net"   />   
    
</ configSections >   
    
<!-- Log4net Begin by Tony  2008.11.20 -->   
    
< log4net >   
        
< appender  name ="ADONetAppender"  type ="log4net.Appender.ADONetAppender" >   
            
< bufferSize  value ="10"   />   
            
< connectionType  value ="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"   />   
            
< connectionString  value ="DATABASE=DBErrorLogs;SERVER=myserver;UID=user;PWD=pwdpwd;Connect Timeout=15;"   />   
            
< commandText  value ="INSERT INTO ErrorLog ([dtDate],[sThread],[sLevel],[sLogger],[sMessage],[sException]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)"   />   
            
< parameter >   
                
< parameterName  value ="@log_date"   />   
                
< dbType  value ="DateTime"   />   
                
< layout  type ="log4net.Layout.RawTimeStampLayout"   />   
            
</ parameter >   
            
< parameter >   
                
< parameterName  value ="@thread"   />   
                
< dbType  value ="String"   />   
                
< size  value ="100"   />   
                
< layout  type ="log4net.Layout.PatternLayout" >   
                    
< conversionPattern  value ="%t"   />   
                
</ layout >   
            
</ parameter >   
            
< parameter >   
                
< parameterName  value ="@log_level"   />   
                
< dbType  value ="String"   />   
                
< size  value ="200"   />   
                
< layout  type ="log4net.Layout.PatternLayout" >   
                    
< conversionPattern  value ="%p"   />   
                
</ layout >   
            
</ parameter >   
            
< parameter >   
                
< parameterName  value ="@logger"   />   
                
< dbType  value ="String"   />   
                
< size  value ="500"   />   
                
< layout  type ="log4net.Layout.PatternLayout" >   
                    
< conversionPattern  value ="%logger"   />   
                
</ layout >   
            
</ parameter >   
          
< parameter >   
                
< parameterName  value ="@message"   />   
                
< dbType  value ="String"   />   
                
< size  value ="3000"   />   
                
< layout  type ="log4net.Layout.PatternLayout" >   
                    
< conversionPattern  value ="%m"   />   
                
</ layout >   
            
</ parameter >   
            
< parameter >   
                
< parameterName  value ="@exception"   />   
                
< dbType  value ="String"   />   
                
< size  value ="4000"   />   
                
< layout  type ="log4net.Layout.ExceptionLayout"   />   
            
</ parameter >   
        
</ appender >   
        
<!--  setup the root category, add the appenders and set the default level  -->   
        
< root >   
            
< level  value ="WARN" />   
            
< level  value ="INFO" />   
            
< level  value ="DEBUG" />   
            
< level  value ="FINE" />   
            
< appender-ref  ref ="ADONetAppender"   />   
        
</ root >   
        
<!--  specify the level for some specific categories  -->   
        
< logger  name ="iNotes" >   
            
< level  value ="WARN" />   
            
< level  value ="INFO" />   
            
< level  value ="DEBUG" />   
            
< level  value ="FINE" />   
            
< appender-ref  ref ="ADONetAppender" />   
        
</ logger >   
        
< logger  name ="StellaLogger" >   
            
< level  value ="ALL" />   
            
< appender-ref  ref ="AdoNetAppender"   />   
        
</ logger >   
    
</ log4net >   
    
<!-- Log4net End -->   
</ configuration >   

 

基本完成了!需要注意的一个参数

 

数据库生成脚本

CREATE   TABLE   [ dbo ] . [ ErrorLog ] (   
    
[ nId ]   [ bigint ]   IDENTITY ( 1 , 1 NOT   NULL ,   
    
[ dtDate ]   [ datetime ]   NOT   NULL ,   
    
[ sThread ]   [ varchar ] ( 100 NOT   NULL ,   
    
[ sLevel ]   [ varchar ] ( 200 NOT   NULL ,   
    
[ sLogger ]   [ varchar ] ( 500 NOT   NULL ,   
    
[ sMessage ]   [ varchar ] ( 3000 NOT   NULL ,   
    
[ sException ]   [ varchar ] ( 4000 NULL

 

 

第四步:在需要记录的每个类中添加如下代码

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

 

给出一个例子

private   void  TestLog()   
        {   
            
try   
            {   
                
//    
            }   
            
catch  (Exception ex)   
            {   
                Loghandle by Tony 
2008.11 . 21 #region  Loghandle by Tony 2008.11.21   
                
string  loginid  =  EmptyString;   
                
// if (user != null) { loginid = user.LoginID; }   
                myLogger.Error(GetErrorMessage(loginid,  1 ), ex);   
                
// Debug("系统已记录错误,请联系管理员!"); return;   
                
// Debug(ErrorHandle.GetErrorInfoByID(999), this.ClientID); return;  
                 #endregion    
            }   
              
        }  

 

<bufferSize value="10" />,表示是记录10 条到缓冲区,满10条后再写入SQL server

调试时可以改为1,实际应用建议为100


 

 

你可能感兴趣的:(sqlserver)