如何配置Log4Net使用Oracle資料庫記錄日誌

來源:互聯網
上載者:User

標籤:timestamp   desc   info   row   rem   varchar   section   base   設定   

    最近在做一個項目的時候,需要增加一個日誌的功能,需要使用Log4Net記錄日誌,把資料插入到Oracle資料庫,經過好久的研究終於成功了。把方法記錄下來,以備以後查詢。

    直接寫實現方法,分兩步完成:

     1、使用NuGet Manager管理工具,增加對Oracle.ManagedDataAccess.dll的引用。

     2、配置具體的檔案。

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>

  <appSettings>
    <add key="log4net.Internal.Debug" value="true "/>
  </appSettings>
 
  <log4net>
    <!-- 產生資料的指令碼
    Create table T_LogHistory
    (
    id NUMBER not null,
    log_date DATE not null,
    log_thread VARCHAR2(50) not null,
    log_level VARCHAR2(50) not null,
    log_logger VARCHAR2(150) not null,
    log_operator VARCHAR2(50) not null,
    log_message VARCHAR2(500) not null,
    log_iP VARCHAR2(50) not null,
    log_machineName VARCHAR2(50) not null,
    log_browser VARCHAR2(50) not null,
    log_location VARCHAR2(500) not null,
    log_exception VARCHAR2(1500) not null,
    constraint pk_LogHistory primary key(id)
    );
   
    Create Sequence seq_LogHistory_ID
    minvalue 1
    maxvalue 9999999999999999999999999999
    start with 1
    increment by 1
    nocache;
    -->
    <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender,log4net">
      <!--BufferSize為緩衝區大小,只有日誌記錄超設定值才會一塊寫入到資料庫-->
      <bufferSize value="1" />
      <!--或寫為<param name="BufferSize" value="10" />-->

      <!--引用-->
      <!--<connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>-->
      <connectionType value="Oracle.ManagedDataAccess.Client.OracleConnection, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
     
      <!--串連資料庫字串-->
      <connectionString value="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=80))(CONNECT_DATA=(SERVICE_NAME=databaseName)));User Id=*******;Password=*******;" />

      <!--插入到表Log-->
      <commandText value="insert into t_loghistory(id, log_date, log_thread, log_level, log_logger, log_operator, log_message, log_ip, log_machinename, log_browser, log_location, log_exception) values(SEQ_LOGHISTORY_ID.nextval, :logDate, :thread, :log_level, :logger, :operator, :message, :clientIP, :machineName, :browser, :location, :exception)" />

      <!--日誌記錄時間,RawTimeStampLayout為預設的時間輸出格式-->
      <parameter>
        <parameterName value=":logDate" />
        <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="String" />
        <size value="200"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%username" />
        </layout>
      </parameter>

      <!--IP地址-->
      <parameter>
        <parameterName value=":clientIP" />
        <dbType value="String" />
        <size value="20" />
        <layout type="Enterprise.Framework.Logger.Extensions.ClientIPLayout,Enterprise.Framework.Logger">
          <conversionPattern value="%ClientIP"/>
        </layout>
      </parameter>

      <!--機器名-->
      <parameter>
        <parameterName value=":machineName" />
        <dbType value="String" />
        <size value="100" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%property{log4net:HostName}" />
        </layout>
      </parameter>

      <!--瀏覽器-->
      <parameter>
        <parameterName value=":browser" />
        <dbType value="String" />
        <size value="50" />
        <layout type="Enterprise.Framework.Logger.Extensions.BrowserLayout">
          <conversionPattern value="%Browser" />
        </layout>
      </parameter>

      <!--日誌訊息-->
      <parameter>
        <parameterName value=":message" />
        <dbType value="String" />
        <size value="3000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </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>

    <root>
      <!--高 OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL 低-->
      <level value="ALL"/>
      <appender-ref ref="ADONetAppender" />
    </root>

    <!--<logger name="StellaLogger">
      <level value="ALL"/>
      <appender-ref ref="AdoNetAppender" />
    </logger>-->
  </log4net>
</configuration> 

      完成上面兩步就可以實現Log4Net針對資料庫Oracle的記錄插入。

如何配置Log4Net使用Oracle資料庫記錄日誌

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.