• Log4Net Config Appender


    整理了下以前项目中使用的Log4Net的Appender。

    1:只记录在一个文件下的

      <appender name="RollingFileAppenderFileSize" type="log4net.Appender.FileAppender">
        <!--日志文件名-->
        <file value="loglog.txt"/>
        <!--编码方式-->
        <encoding value ="unicodeFFFE"/>
        <!--是否在文件中追加-->
        <appendToFile value="true"/>
        <!--加入这个可以保证线程安全 另一种形式:log4net.Appender.FileAppender+InterProcessLock-->
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%newline记录时间:%date{yyyy-mm-dd hh:mm:ss} %n线程ID:[%thread] %n日志级别:%-5level %n消息:%message%n代码所在位置:%location%n异常信息:%exception%n"/>
        </layout>
      </appender>
    View Code

    2:滚动文件,其中分为3类,1:按大小来滚动文件名,2:按日期来滚动文件名,3:按大小以及日期的混合方式

      <!--按最大的Size来判断的是否产生新的Log-->
      <appender name="RollingFileAppenderFileSize" type="log4net.Appender.RollingFileAppender">
        <!--日志文件名-->
        <file value="loglog.txt"/>
        <!--编码方式-->
        <encoding value ="unicodeFFFE"/>
        <!--是否在文件中追加-->
        <appendToFile value="true"/>
        <!--按照文件的大小进行变换日志文件-->
        <rollingStyle value="Size"/>
        <!--最大变换数量-->
        <maxSizeRollBackups value="-1"/>
        <!--是否维持file原来的后缀-->
        <PreserveLogFileNameExtension value ="true"/>
        <!--加入这个可以保证线程安全 另一种形式:log4net.Appender.FileAppender+InterProcessLock-->
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <!--最大文件大小-->
        <maximumFileSize value="100KB"/>
        <!--日志文件名是否为静态-->
        <staticLogFileName value="false"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%newline记录时间:%date{yyyy-mm-dd hh:mm:ss} %n线程ID:[%thread] %n日志级别:%-5level %n消息:%message%n代码所在位置:%location%n异常信息:%exception%n"/>
        </layout>
      </appender>
    
      <!--按最大的Size,以及Date来判断的是否产生新的Log-->
      <appender name="RollingFileAppenderFileDateSize" type="log4net.Appender.RollingFileAppender">
        <!--日志文件名-->
        <file value="log"/>
        <!--编码方式-->
        <encoding value ="unicodeFFFE"/>
        <!--是否在文件中追加-->
        <appendToFile value="true"/>
        <!--按照文件的大小进行变换日志文件Once,Size,Date,Composite -->
        <rollingStyle value="Composite"/>
        <!--按日期递进的文件名 其中 &quot;(") 是用来转义的,通知系统 .log是文本信息。 备注:这里不可以使用文件名中不允许使用的字符 比如:等-->
        <datePattern value="yyyy-MM-dd hh_mm_ss&quot;.log&quot;" />
        <!--最大变换数量-->
        <maxSizeRollBackups value="-1"/>
        <!--是否维持原来的后缀-->
        <PreserveLogFileNameExtension value ="true"/>
        <!--是否静态的文件,就是最新的日志是否永远是File内定义的文件-->
        <StaticLogFileName value="false"/>
        <!--加入这个可以保证线程安全 另一种形式:log4net.Appender.FileAppender+InterProcessLock-->
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <!--最大文件大小 支持KB M GB 但不支持小数-->
        <maximumFileSize value="100KB"/>
        <!--日志文件名是否为静态-->
        <staticLogFileName value="false"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%newline记录时间:%date{yyyy-mm-dd hh:mm:ss} %n线程ID:[%thread] %n日志级别:%-5level %n消息:%message%n代码所在位置:%location%n异常信息:%exception%n"/>
        </layout>
      </appender>
    
      <!--按Date来判断的是否产生新的Log-->
      <appender name="RollingFileAppenderFileDate" type="log4net.Appender.RollingFileAppender">
        <!--日志文件名-->
        <file value="log"/>
        <!--编码方式-->
        <encoding value ="unicodeFFFE"/>
        <!--是否在文件中追加-->
        <appendToFile value="true"/>
        <!--按照文件的大小进行变换日志文件Once,Size,Date,Composite -->
        <rollingStyle value="Date"/>
        <!--按日期递进的文件名 其中 &quot;(") 是用来转义的,通知系统 .log是文本信息。 备注:这里不可以使用文件名中不允许使用的字符 比如:等 这里最小的单位为分钟-->
        <datePattern value="yyyy-MM-dd hh_mm_ss&quot;.log&quot;" />
        <!--最大变换数量-->
        <maxSizeRollBackups value="-1"/>
        <!--加入这个可以保证线程安全 另一种形式:log4net.Appender.FileAppender+InterProcessLock-->
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <!--是否维持原来的后缀-->
        <PreserveLogFileNameExtension value ="true"/>
        <!--是否静态的文件-->
        <StaticLogFileName value="false"/>
        <!--日志文件名是否为静态-->
        <staticLogFileName value="false"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%newline记录时间:%date{yyyy-mm-dd hh:mm:ss} %n线程ID:[%thread] %n日志级别:%-5level %n消息:%message%n代码所在位置:%location%n异常信息:%exception%n"/>
        </layout>
      </appender>
    View Code

    3:记录在SqlServer数据库中,备注这里特别注意ConnectionType,在源码中是使用了Type.GetType(ConnectionType)来获取类的,所以必须带有key 和 version

       创建SQL表的SQL语句:

    CREATE TABLE [dbo].[TestSysLog](
      [Date] [date] NOT NULL,
      [Thread] [int] NOT NULL,
      [Level] [nvarchar](255) NOT NULL,
      [Logger] [nvarchar](255) NOT NULL,
      [Message] [nvarchar](max) NULL,
      [Method] [nvarchar](255) NULL,
      [Location] [nvarchar](1023) NULL,
      [Exception] [nvarchar](max) NULL
      )
    View Code

     Appender:

        <!--输出到SQLServer数据库 注意这里的connectionType 一定要带上publickeyToken 因为源码中使用的是Type.GetType()-->
        <appender name="AdoNetAppender_SQLServer" type="log4net.Appender.AdoNetAppender">
          <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
          <connectionString value="data source=192.168.21.111;Initial Catalog=SEM;Persist Security Info=True;User ID=sa;Password=123456" />
          <commandText value="INSERT INTO [TestSysLog] ([Date], [Thread], [Level], [Logger], [Method], [Location],[Message], [Exception]) VALUES (@Date, @Thread, @Level, @Logger, @Method,@Location,@Message, @Exception)" />
          <bufferSize value="1" />
          <parameter>
            <parameterName value="@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="@Level" />
            <dbType value="String" />
            <size value="255" />
            <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="@Method" />
            <dbType value="String" />
            <size value="255" />
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%method" />
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@Location" />
            <dbType value="String" />
            <size value="1023" />
            <layout type="log4net.Layout.PatternLayout" >
              <conversionPattern value="%location" />
            </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="AnsiString" />
            <size value="8000" />
            <layout type="log4net.Layout.ExceptionLayout" />
          </parameter>
        </appender>
    View Code

    4:记录到Oracle数据库中。备注这里特别注意ConnectionType,在源码中是使用了Type.GetType(ConnectionType)来获取类的,所以必须带有key 和 version。所以Oracle版本不同connectionType 也不同

       创建SysLog表的SQL语句: 

    CREATE TABLE SysLog
    (
      Log_Date       DATE                               NOT NULL,
      Log_Thread     INTEGER                            NOT NULL,
      Log_Level      NVARCHAR2(255)                     NOT NULL,
      Log_Logger     NVARCHAR2(255)                     NOT NULL,
      Log_Message    nclob,
      Log_Method     NVARCHAR2(255),
      Log_Location   NVARCHAR2(1023),
      Log_Exception  nclob
    )
    View Code

       Appender Oracle8i

      <appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender">
        <connectionType value ="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        <connectionString value="data source=[_serviceName_];User ID=[_userid_];Password=[_password_]" />
        <commandText value="INSERT INTO SysLog (Log_Date, Log_Thread, Log_Level, Log_Logger, Log_Message, Log_Method,Log_Location, Log_Exception) VALUES (:Date, :Thread, :Level, :Logger,:Message,:Method,:Location,:Exception)" />
        <bufferSize value="250" />
        <parameter>
          <parameterName value=":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=":Level" />
          <dbType value="String" />
          <size value="255" />
          <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=":Method" />
          <dbType value="String" />
          <size value="255" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%method" />
          </layout>
        </parameter>
        <parameter>
          <parameterName value=":Location" />
          <dbType value="String" />
          <size value="1023" />
          <layout type="log4net.Layout.PatternLayout" >
            <conversionPattern value="%location" />
          </layout>
        </parameter>
        <parameter>
          <parameterName value=":Message" />
          <dbType value="AnsiString" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%message" />
          </layout>
        </parameter>
        <parameter>
          <parameterName value=":Exception" />
          <dbType value="AnsiString" />      
          <layout type="log4net.Layout.ExceptionLayout" />
        </parameter>
      </appender>
    View Code

       Appender Oracle9i

    <appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender">
        <connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        <connectionString value="data source=[mydatabase];User ID=[user];Password=[password]" />
      <commandText value="INSERT INTO SysLog (Log_Date, Log_Thread, Log_Level, Log_Logger, Log_Message, Log_Method,Log_Location, Log_Exception) VALUES (:Date, :Thread, :Level, :Logger,:Message,:Method,:Location,:Exception)" />
      <bufferSize value="128" />
      <parameter>
        <parameterName value=":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=":Level" />
        <dbType value="String" />
        <size value="255" />
        <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=":Method" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%method" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value=":Location" />
        <dbType value="String" />
        <size value="1023" />
        <layout type="log4net.Layout.PatternLayout" >
          <conversionPattern value="%location" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value=":Message" />
        <dbType value="AnsiString" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value=":Exception" />
        <dbType value="AnsiString" />
        <layout type="log4net.Layout.ExceptionLayout" />
      </parameter>
      </appender>
    View Code

    未完待续~~

  • 相关阅读:
    python模块安装路径
    yum软件搜索
    项目里用到的python知识点
    python调用C函数
    opencv VideoCapture使用示例
    Django模型层之多表操作
    博客园 装饰
    mysql条件查询-排除null ---oracle、mysql 区分总结
    Android——Fragment详解
    Android——监听事件总结
  • 原文地址:https://www.cnblogs.com/xiaolb/p/3793076.html
Copyright © 2020-2023  润新知