代码改变世界

Log4Net使用

2007-01-31 15:43  Rainbow  阅读(646)  评论(1)    收藏  举报

首先你应该下载log4net.dll并引入到你的项目中
配置web.config文件。
<?xml version="1.0"?>
<!--
    注意: 除了手动编辑此文件以外,您还可以使用
    Web 管理工具来配置应用程序的设置。可以使用 Visual Studio 中的
     “网站”->“Asp.Net 配置”选项。
    设置和注释的完整列表在
    machine.config.comments 中,该文件通常位于
    \Windows\Microsoft.Net\Framework\v2.x\Config 中
-->
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <root>
      <level value="ALL" />
      <appender-ref ref="ADONetAppender" />
      <appender-ref ref="RollingLogFileAppender"/>
      <appender-ref ref="ConsoleAppender"/>
    </root>
    <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
      <bufferSize value="10" />
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <connectionString value="Data Source=.\sqlexpress;Initial Catalog=YourDB;Persist Security Info=True;User ID=sa;Password=YourPassword" />
      <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) 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="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="50" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@exception" />
        <dbType value="String" />
        <size value="2000" />
        <layout type="log4net.Layout.ExceptionLayout" />
      </parameter>
    </appender>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="C:\Log.txt" />
      <param name="AppendToFile" value="true" />
      <param name="MaxSizeRollBackups" value="10" />
      <param name="MaximumFileSize" value="5MB" />
      <param name="RollingStyle" value="Size" />
      <param name="StaticLogFileName" value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
      </layout>
    </appender>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
      </layout>
    </appender>
  </log4net>
  <appSettings/>
 <connectionStrings>
  <add name="VNETConnectionString" connectionString="Data Source=.\sqlexpress;Initial Catalog=99cc;Persist Security Info=True;User ID=sa;Password=mssql2005"
   providerName="System.Data.SqlClient" />
 </connectionStrings>
 <system.web>
  <!--
            设置 compilation debug="true" 将调试符号插入
            已编译的页面中。但由于这会
            影响性能,因此只在开发过程中将此值
            设置为 true。
        -->
  <compilation debug="true"/>
  <!--
            通过 <authentication> 节可以配置 ASP.NET 使用的
            安全身份验证模式,
            以标识传入的用户。
        -->
  <authentication mode="Forms"/>
  <!--
            如果在执行请求的过程中出现未处理的错误,
            则通过 <customErrors> 节可以配置相应的处理步骤。具体说来,
            开发人员通过该节可以配置
            要显示的 html 错误页
            以代替错误堆栈跟踪。

        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
            <error statusCode="403" redirect="NoAccess.htm" />
            <error statusCode="404" redirect="FileNotFound.htm" />
        </customErrors>
        -->
 </system.web>
</configuration>
以为有写到数据库里面的,所以要在你的DB里面建一个张表。SQL脚本:
CREATE TABLE [dbo].[Log](
 [ID] [int] IDENTITY(1,1) NOT NULL,
 [Date] [datetime]  NOT NULL,
 [Thread] [nvarchar](255) NOT  NULL,
 [Level] [nvarchar](50) NOT NULL,
 [Logger] [nvarchar](255) NOT NULL,
 [Message] [nvarchar](4000) NOT  NULL,
 [Exception] [nvarchar](4000) NOT  NULL,
具体请自己处理。

WEB.CONFIG和数据库表多建好以后。
然后在Global.asax Application_Start中添加
void Application_Start(object sender, EventArgs e)
    {
        // 在应用程序启动时运行的代码
        log4net.Config.XmlConfigurator.Configure();
    }
就可以实例化一个LOGGER了。
新建一个MyLog的类。然后是定义一个log。private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(MyLog));
public class MyLog
{
 public MyLog()
 {
  //
  // TODO: 在此处添加构造函数逻辑
  //
 }
    private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(MyLog)); //MyLog为定义的类名。
    public static void LogInfo(string LogMessage)
    {
        log.Info(LogMessage);
    }

    public static void LogError(string LogMessage)
    {
        log.Error(LogMessage);
    }
//具体的函数可以自己填上去。格式多一个样

}

要使用Log4net处理日志时。就只要直接使用MyLog类下面的静态方法了。
 log.Info("日志测试");

然后去数据库里面查看就OK了。但是我有个地方不明白是为什么Log4net写数据库的时候会这么慢啊。但是写文本的就好。希望有人能解答一下啊。