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

来源:http://www.cnblogs.com/PatrickLiu/archive/2016/10/29/6012153.html
-Advertisement-
Play Games

最近在做一個項目的時候,需要增加一個日誌的功能,需要使用Log4Net記錄日誌,把數據插入到Oracle資料庫,經過好久的研究終於成功了。把方法記錄下來,以備以後查詢。 直接寫實現方法,分兩步完成: 1、使用NuGet Manager管理工具,增加對Oracle.ManagedDataAccess. ...


    最近在做一個項目的時候,需要增加一個日誌的功能,需要使用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的記錄插入。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言: 由於先前用python+opencv做了一會兒人臉識別。(其實是別人做的,我是打醬油的)。 用winform做了當時用的一個功能界面。打開攝像頭併進行拍照保存。 界面預覽: 此次,利用的是winform+AForge框架。AForge是全過程都在用的,必須要有。 介紹一下製作過程: 1.創建 ...
  • 一、簡介 首先來看看.net的發展中的各個階段的特性:NET 與C# 的每個版本發佈都是有一個“主題”。即:C#1.0托管代碼→C#2.0泛型→C#3.0LINQ→C#4.0動態語言→C#4.5非同步編程 所謂的非同步編程是利用CPU空閑時間和多核的特性,它所返回的Task或Task是對await的一個 ...
  • 文檔目錄 本節內容: 簡介 安裝 安裝Nuget包 設置模塊依賴 配置你的實體 創建控制器 示例 獲取實體列表 請求 響應 獲取單個實體 請求 響應 獲取單個實體及導航屬性 請求 響應 查詢 請求 響應 創建一個新實體 請求 響應 獲取元數據 請求 響應 示例項目 安裝Nuget包 設置模塊依賴 配 ...
  • Quartz.NET是一個非常強大的作業調度框架,適用於各種定時執行的業務處理等,類似於WINDOWS自帶的任務計劃程式,其中運用Cron表達式來實現各種定時觸發條件是我認為最為驚喜的地方。 Quartz.NET主要用到下麵幾個類: IScheduler --調度器 IJobDetail --作業任 ...
  • using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ref_out { class Program { static void Method1(ref int ...
  • 文檔目錄 本節內容: 創建動態Web Api控制器 ForAll 方法 重寫 ForAll ForMethods Http 動詞 WithVerb 方法 HTTP 特性 命名約定 Api 瀏覽器 RemoteService 特性 動態Javascript代理 AJAX 參數 單獨服務腳本 Angul ...
  • 在網上收集。。。 C#的值類型,引用類型,棧,堆,ref,out C# 的類型系統可分為兩種類型,一是值類型,一是引用類型,這個每個C#程式員都瞭解。還有托管堆,棧,ref,out等等概念也是每個C#程式員都會接觸到的概念,也是C#程式員面試經常考到的知識,隨便搜搜也有無數的文章講解相關的概念,貌似 ...
  • 文檔目錄 本節內容: 簡介 AbpApiController 基類 本地化 其它 過濾 審計日誌 授權 防偽造過濾 工作單元 結果包裝和異常處理 結果緩存 驗證 模塊綁定器 本地化 其它 審計日誌 授權 防偽造過濾 工作單元 結果包裝和異常處理 結果緩存 驗證 簡介 通過Abp.Web.Api的nu ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...