例如:客户端的登录,用户操作记录都记录到客户端的log日志中。而且还要支持多个线程想log文件中写日志。(这一步我已经实现了)。但是考虑到性能问题,所有我想用线程池来做。请问怎么做啊 。

解决方案 »

  1.   

    Log4net是一个开源的错误日志记录项目,易用性强,源自log4j,品质值得信赖。 下面汇报一下我的安装部署log4net到MS sql server的经验。一、首先是下载log4net最新版地址:http://logging.apache.org/log4net/ 直接引用dll也行,我是把下载的源码在Vs2005下编译成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文件, 是因为这样可以单独修改调试部署,也就是非侵入式安装的思想。呵呵。内容大概如下: view plaincopy to clipboardprint?
    <?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>  
    <?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> 
      

  2.   

    多打几个log,最后生成一个log文件就可以了。