• 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,1NOT NULL,   
        
    [dtDate] [datetime] NOT NULL,   
        
    [sThread] [varchar](100NOT NULL,   
        
    [sLevel] [varchar](200NOT NULL,   
        
    [sLogger] [varchar](500NOT NULL,   
        
    [sMessage] [varchar](3000NOT NULL,   
        
    [sException] [varchar](4000NULL

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

    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


     

  • 相关阅读:
    Class StatusesTableSeeder does not exist 如何解决
    Heroku 如何上重置 PostgreSQL 数据库
    git强制push
    Heroku登录失败
    将手机替换为*号
    使用TP自带缓存时。出现第一次拿不到数据。
    PHP实现查看邮件是否被阅读
    使用file_get_contents下载图片
    介绍几款开源好用的产品
    查看光纤卡wwn号【转载】
  • 原文地址:https://www.cnblogs.com/greatandforever/p/1848043.html
Copyright © 2020-2023  润新知