• 如何配置和使用log4net日志(VS2008+SQL2008环境下)


    配置log4net日志输出到ms sql(开发环境:VS2008,SQL2008,log4net 1.2.10)

    今天共介绍两种方式:1、使用独立的config文件;2、使用web.config文件

    log4net目前最新版本:1.2.10.0 下载地址:http://logging.apache.org/log4net/download.html
    首先创建数据库日志表
    USE [Test]
    GO

    /****** Object: Table [dbo].[ErrorLog]    Script Date: 05/17/2010 10:19:54 ******/
    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO

    SET ANSI_PADDING ON
    GO

    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,
    CONSTRAINT [PK_ErrorLog] PRIMARY KEY CLUSTERED
    (
    [nId] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]

    GO

    SET ANSI_PADDING OFF
    GO

    ALTER TABLE [dbo].[ErrorLog] ADD DEFAULT (getdate()) FOR [dtDate]
    GO

    一、配置到独立的config文件


    1、新建一个web应用程序,添加log4net的引用
    2、右键点击项目添加新建项,命名为log4net.config
    3、修改log4net.config文件内容为
    <?xml version="1.0"?>
    <configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    </configSections>
    <log4net>
    <!--
        <appender name="RollingLogFileAppender" type=" log4net.Appender.RollingFileAppender">
          <file value="rolling-log.txt" />
          <appendToFile value="true" />
          <maxSizeRollBackups value="10" />
          <maximumFileSize value="10MB" />
          <rollingStyle value="Size" />
          <staticLogFileName value="true" />
          <layout type="log4net.Layout.PatternLayout">
            <header value="[Header]&#13;&#10;" />
            <footer value="[Footer]&#13;&#10;" />
            <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
          </layout>
        </appender>
    -->
        <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
          <bufferSize value="1" />
       <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089"/>
       <connectionString value="Password=123456;Persist Security Info=True;User ID=sa;Initial Catalog=Test;Data Source=."/>
          <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>
       
        <root>
          <level value="WARN"/>
          <level value="INFO"/>
          <level value="DEBUG"/>
          <level value="FINE"/>
          <appender-ref ref="ADONetAppender" />
        </root>
        <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 debug="false">

        <appender name="LogFileAppender" type="log4net.Appender.FileAppender">

          <param name="File" value="SunSystem.log.txt"/>

          <param name="datePattern" value="MM-dd HH:mm"/>

          <param name="AppendToFile" value="true"/>

          <layout type="log4net.Layout.PatternLayout">

            <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>

          </layout>

        </appender>

        <root>

          <level value="DEBUG"/>

          <appender-ref ref=" LogFileAppender "/>

        </root>

    </log4net>
    -->
    </configuration>
    4、打开AssemblyInfo.cs文件,添加[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]


    5、至此配置基本完成,现在演示如何调用
    首先创建Log对象 private static log4net.ILog myLogger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    调用配置文件log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));该条我是写到构造函数中的。如:
    public _default()
            {
                  log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));
            }
    正式调用:
    protected void Button2_Click(object sender, EventArgs e)
            {
                 myLogger.Debug("系统已记录错误,请联系管理员", null);

            }
    到数据库中查询下结果吧。


    二、配置到web.config文件


    1、新建一个web应用程序,添加log4net的引用
    2、修改web.config内容为:
    <?xml version="1.0"?>
    <configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
        <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral,

    PublicKeyToken=31BF3856AD364E35">
          <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral,

    PublicKeyToken=31BF3856AD364E35">
            <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0,

    Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
            <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral,

    PublicKeyToken=31BF3856AD364E35">
              <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral,

    PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
              <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral,

    PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
              <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0,

    Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
              <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral,

    PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
            </sectionGroup>
          </sectionGroup>
        </sectionGroup>
    </configSections>
    <log4net>
       <!--
        <appender name="RollingLogFileAppender" type=" log4net.Appender.RollingFileAppender">
          <file value="rolling-log.txt" />
          <appendToFile value="true" />
          <maxSizeRollBackups value="10" />
          <maximumFileSize value="10MB" />
          <rollingStyle value="Size" />
          <staticLogFileName value="true" />
          <layout type="log4net.Layout.PatternLayout">
            <header value="[Header]&#13;&#10;" />
            <footer value="[Footer]&#13;&#10;" />
            <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
          </layout>
        </appender>
        -->
        <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
          <bufferSize value="1" />
             <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089"/>
             <connectionString value="Password=123456;Persist Security Info=True;User ID=sa;Initial Catalog=Test;Data Source=."/>
          <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>

        <root>
          <level value="WARN"/>
          <level value="INFO"/>
          <level value="DEBUG"/>
          <level value="FINE"/>
          <appender-ref ref="ADONetAppender" />
        </root>
        <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>
    <appSettings>
        <add key="Default" value="Password=123456;Persist Security Info=True;User ID=sa;Initial Catalog=Test;Data Source=."/>
    </appSettings>

    <connectionStrings/>

    <system.web>
       <!--
                设置 compilation debug="true" 可将调试符号插入
                已编译的页面中。但由于这会
                影响性能,因此只在开发过程中将此值
                设置为 true。
            -->
       <compilation debug="true">
        <assemblies>
         <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
         <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
         <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
         <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        </assemblies>
       </compilation>
       <!--
                通过 <authentication> 节可以配置 ASP.NET 用来
                识别进入用户的
                安全身份验证模式。
            -->
       <authentication mode="Windows"/>
       <!--
                如果在执行请求的过程中出现未处理的错误,
                则通过 <customErrors> 节可以配置相应的处理步骤。具体说来,
                开发人员通过该节可以配置
                要显示的 html 错误页
                以代替错误堆栈跟踪。

            <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
                <error statusCode="403" redirect="NoAccess.htm" />
                <error statusCode="404" redirect="FileNotFound.htm" />
            </customErrors>
            -->
       <pages>
        <controls>
         <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral,

    PublicKeyToken=31BF3856AD364E35"/>
         <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral,

    PublicKeyToken=31BF3856AD364E35"/>
        </controls>
       </pages>
       <httpHandlers>
        <remove verb="*" path="*.asmx"/>
        <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0,

    Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions,

    Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0,

    Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
          <!-- Register the ajax handler -->
          <add verb="POST,GET" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax" />

        </httpHandlers>
       <httpModules>
        <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral,

    PublicKeyToken=31BF3856AD364E35"/>
       </httpModules>
    </system.web>
    <system.codedom>
       <compilers>
        <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0,

    Culture=neutral, PublicKeyToken=b77a5c561934e089">
         <providerOption name="CompilerVersion" value="v3.5"/>
         <providerOption name="WarnAsError" value="false"/>
        </compiler>
       </compilers>
    </system.codedom>
    <!--
            在 Internet 信息服务 7.0 下运行 ASP.NET AJAX 需要 system.webServer
            节。对早期版本的 IIS 来说则不需要此节。
        -->
    <system.webServer>
       <validation validateIntegratedModeConfiguration="false"/>
       <modules>
        <remove name="ScriptModule"/>
        <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0,

    Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
       </modules>
       <handlers>
        <remove name="WebServiceHandlerFactory-Integrated"/>
        <remove name="ScriptHandlerFactory"/>
        <remove name="ScriptHandlerFactoryAppServices"/>
        <remove name="ScriptResource"/>
        <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory,

    System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode"

    type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd"

    type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
       </handlers>
    </system.webServer>
    <runtime>
       <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
         <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
         <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
        </dependentAssembly>
        <dependentAssembly>
         <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
         <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
        </dependentAssembly>
       </assemblyBinding>
    </runtime>
    </configuration>
    3、调用配置文件
    public _default()
            {
                 log4net.Config.DOMConfigurator.Configure();//直接配置到web.config
               
            }
    4、调用方法
    protected void Button2_Click(object sender, EventArgs e)
            {

                 log4net.ILog log = log4net.LogManager.GetLogger(typeof(Sample));
                 log.Info("测试结果!");//配置到webconfig
            }
    配置完成。

  • 相关阅读:
    算法
    什么叫「人的格局」?是否有必要培养大的格局或怎么培养?
    套接字
    信号量 P V测试详解
    Emacs快速入门
    Emacs 从入门到精通
    Linux多进程之间的文件锁
    mysql 登录报错:ERROR 1045 (28000)
    类职责协作模型
    .Netcore使用Session
  • 原文地址:https://www.cnblogs.com/wellsoho/p/1807563.html
Copyright © 2020-2023  润新知