• Log4net数据表


    USE [ASPNETDB]
    GO
    /****** 对象:  Table [dbo].[Log]    脚本日期: 12/21/2011 22:41:53 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING ON
    GO
    CREATE TABLE [dbo].[Log](
    	[ID] [int] IDENTITY(1,1) NOT NULL,
    	[Date] [datetime] NOT NULL,
    	[Thread] [varchar](100) COLLATE Chinese_PRC_CI_AS NULL,
    	[Level] [varchar](100) COLLATE Chinese_PRC_CI_AS NULL,
    	[Logger] [varchar](200) COLLATE Chinese_PRC_CI_AS NULL,
    	[UserName] [varchar](100) COLLATE Chinese_PRC_CI_AS NULL,
    	[ControlName] [varchar](100) COLLATE Chinese_PRC_CI_AS NULL,
    	[ActionName] [varchar](100) COLLATE Chinese_PRC_CI_AS NULL,
    	[Message] [text] COLLATE Chinese_PRC_CI_AS NULL,
    	[IP] [varchar](20) COLLATE Chinese_PRC_CI_AS NULL,
    	[MachineName] [varchar](100) COLLATE Chinese_PRC_CI_AS NULL,
    	[Browser] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
    	[Location] [text] COLLATE Chinese_PRC_CI_AS NULL,
    	[Exception] [text] COLLATE Chinese_PRC_CI_AS NULL
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    
    GO
    SET ANSI_PADDING OFF
    

    <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender,log4net">

    <!--BufferSize为缓冲区大小,只有日志记录超设定值才会一块写入到数据库-->

    <bufferSize value="10" /><!—或写为<param name="BufferSize" value="10" />-->

     

    <!--引用-->

    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

     

    <!--连接数据库字符串-->

    <connectionString value="data source=.;initial catalog=Test;integrated security=false;persist security info=True;User ID=sa;Password=;" />

     

    <!--插入到表Log-->

    <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Operator],[Message],[ActionType],[Operand],[IP],[MachineName],[Browser],[Location],[Exception]) VALUES (@log_date, @thread, @log_level, @logger,@operator, @message,@action_type,@operand,@ip,@machineName,@browser,@location,@exception)" />

     

    <!—日志记录时间,RawTimeStampLayout为默认的时间输出格式 -->

          <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="%thread" />

            </layout>

          </parameter>

     

          <!--日志等级-->

          <parameter>

            <parameterName value="@log_level" />

            <dbType value="String" />

            <size value="100" />

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

              <conversionPattern value="%level" />

            </layout>

          </parameter>

     

          <!--日志记录类名称-->

          <parameter>

            <parameterName value="@logger" />

            <dbType value="String" />

            <size value="200" />

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

              <conversionPattern value="%logger" />

            </layout>

          </parameter>

         

          <!--操作者。这个是自定义的输出字段,使用重新实现的布局器ReflectionLayout -->

          <parameter>

            <parameterName value="@operator" />

    <!—设置为Int32时只有bufferSize的 value<="1"才正确输出,没有找出原因。-->

            <dbType value="Int16" />

            <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">

              <conversionPattern value="%property{Operator}" />

            </layout>

          </parameter>

     

          <!--操作对象-->

          <parameter>

            <parameterName value="@operand" />

            <dbType value="String" />

            <size value="300" />

            <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">

              <conversionPattern value="%property{Operand}" />

            </layout>

          </parameter>

     

          <!—IP地址-->

          <parameter>

            <parameterName value="@ip" />

            <dbType value="String" />

            <size value="20" />

            <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">

              <conversionPattern value="%property{IP}" />

            </layout>

          </parameter>

     

          <!--机器名-->

          <parameter>

            <parameterName value="@machineName" />

            <dbType value="String" />

            <size value="100" />

            <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">

              <conversionPattern value="%property{MachineName}" />

            </layout>

          </parameter>

     

          <!--浏览器-->

          <parameter>

            <parameterName value="@browser" />

            <dbType value="String" />

            <size value="50" />

            <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">

              <conversionPattern value="%property{Browser}" />

            </layout>

          </parameter>

         

          <!—日志消息-->

          <parameter>

            <parameterName value="@message" />

            <dbType value="String" />

            <size value="3000" />

            <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">

              <conversionPattern value="%property{Message}" />

            </layout>

          </parameter>

     

          <!--动作类型-->

          <parameter>

            <parameterName value="@action_type" />

            <dbType value="Int16" />

            <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">

              <conversionPattern value="%property{ActionType}" />

            </layout>

          </parameter>

     

          <!—记录日志的位置-->

          <parameter>

            <parameterName value="@location" />

            <dbType value="String" />

            <size value="2000" />

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

              <conversionPattern value="%location" />

            </layout>

          </parameter>

         

          <!—异常信息。ExceptionLayout 为异常输出的默认格式-->

          <parameter>

            <parameterName value="@exception" />

            <dbType value="String" />

            <size value="4000" />

            <layout type="log4net.Layout.ExceptionLayout" />

          </parameter>

    </appender>

    注意:

    向表中输出的字段不能多于数据表本身字段,而反之则可以,但这些多余字段一定使其可以为空,否则便写不到数据库;

    输出字段的类型一定是对应数据表字段数据类型可以隐式转换的,而且长度也不能超过,否则也不能写入;

    数据表字段设置尽量可以为空,这样可以避免一条日志记录存在空数据导致后面的日志都记录不了。

    4.3<logger>的配置
    在配置文件<appender>中的配置好了输出的介质,格式,过滤方式,还要定义日志对象<logger>。

    在框架的体系里,所有的日志对象都是根日志(root logger)的后代。 因此如果一个日志对象没有在配置文件里显式定义,则框架使用根日志中定义的属性。在<root>标签里,可以定义level级别值和Appender的列表。如果没有定义LEVEL的值,则缺省为DEBUG。可以通过<appender-ref>标签定义日志对象使用的Appender对象。<appender-ref>声明了在其他地方定义的Appender对象的一个引用。在一个logger对象中的设置会覆盖根日志的设置。而对Appender属性来说,子日志对象则会继承父日志对象的Appender列表。这种缺省的行为方式也可以通过显式地设定<logger>标签的additivity属性为false而改变。

    <root>不显式申明时使用默认的配置。我觉得在使用时不定义<root>,自定义多个<logger>,在程序中记录日志时直接使用<logger>的name来查找相应的<logger>,这样更灵活一些。例如:

    <!--同时写两个文件和数据库-->

    <logger name="ReflectionLayout">

          <level value="DEBUG"/>

          <appender-ref ref="HashtableLayout"/>

          <appender-ref ref="ReflectionLayout"/>

          <appender-ref ref="ADONetAppender"/>

    </logger>

    4.4关联配置文件
    log4net默认关联的是应用程序的配置文件App.config(BS程序是Web.config),可以使用程序集自定义属性来进行设置。下面来介绍一下这个自定义属性:

    log4net.Config.XmlConifguratorAttribute。

     

    XmlConfiguratorAttribute有3个属性:

    ConfigFile: 配置文件的名字,文件路径相对于应用程序目录

    (AppDomain.CurrentDomain.BaseDirectory)。ConfigFile属性不能和ConfigFileExtension属性一起使用。

    ConfigFileExtension: 配置文件的扩展名,文件路径相对于应用程序的目录。ConfigFileExtension属性不能和ConfigFile属性一起使用。

    Watch: 如果将Watch属性设置为true,就会监视配置文件。当配置文件发生变化的时候,就会重新加载。

    如果ConfigFile和ConfigFileExtension都没有设置,则使用应用程序的配置文件App.config(Web.config)。

     

    可以在项目的AssemblyInfo.cs文件里添加以下的语句:

     //监视默认的配置文件,App.exe.config   

    [assembly: log4net.Config.XmlConfigurator(Watch = true)]

     

    //监视配置文件,App.exe.log4net。

    [assembly: log4net. Config.XmlConfigurator(ConfigFileExtension = "log4net", Watch = true)]

     

    //使用配置文件log4net.config,不监视改变。注意log4net.config文件的目录,BS程序在站点目录//下,CS则在应用程序启动目录下,如调试时在\bin\Debug下,一般将文件属性的文件输出目录调为//始终复制即可

    [assembly: log4net. Config.XmlConfigurator(ConfigFile = "log4net.config")]

     

    //使用配置文件log4net.config,不监视改变

    [assembly: log4net. Config.XmlConfigurator()]

     

    也可以在Global.asax的Application_Start里或者是Program.cs中的Main方法中添加,注意这里一定是绝对路径,如下所示:

    //这是在BS程序下,使用自定义的配置文件log4net.xml,使用Server.MapPath("~") + //@"\log4net.xml”来取得路径。 \log4net.xml为相对于站点的路径

    // ConfigureAndWatch()相当于Configure(Watch = true)

    log4net.Config.XmlConfigurator.ConfigureAndWatch(

    new System.IO.FileInfo(Server.MapPath("~") + @"\log4net.xml"));

    //这是在CS程序下,可以用以下方法获得:

    string assemblyFilePath = Assembly.GetExecutingAssembly().Location;

    string assemblyDirPath = Path.GetDirectoryName(assemblyFilePath);

    string configFilePath = assemblyDirPath + " \\log4net.xml";

    log4net.Config.XmlConfigurator.ConfigureAndWatch(

    new FileInfo(configFilePath));

     

    或直接使用绝对路径:

    //使用自定义的配置文件,直接绝对路径为:c:/log4net.config

    log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(@"c:/log4net.config"));

     

     

    转自:http://www.cnblogs.com/neekerss/archive/2011/01/04/1925171.html

  • 相关阅读:
    JS 获取当前时间,格式为年月日时分秒
    HTML Input=“file”文件上传,限制文件类型 Accept Attribute File Type (CSV)
    react使用redux操作购物车数据
    koa2实现对mysql的增删改查函数封装
    axios中get请求与post请求的简单函数封装
    canvas 简介
    H5 新API 续
    h5 新API
    JQuery
    DOM 文档对象模型
  • 原文地址:https://www.cnblogs.com/shiningrise/p/2296411.html
Copyright © 2020-2023  润新知