当前位置:编程学习 > C#/ASP.NET >>

C# 怎样实现日志记录功能

例如:客户端的登录,用户操作记录都记录到客户端的log日志中。而且还要支持多个线程想log文件中写日志。(这一步我已经实现了)。但是考虑到性能问题,所有我想用线程池来做。请问怎么做啊 。 --------------------编程问答-------------------- log4net控件,现成的。 --------------------编程问答-------------------- 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> 
--------------------编程问答-------------------- 你可以在数据库建立一个日志表,
记录当前用户的用户名及登陆时间即可 --------------------编程问答-------------------- 多打几个log,最后生成一个log文件就可以了。 --------------------编程问答-------------------- 我只会java的
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,