.net 簡單實用Log4net(多個日誌配置文件)

来源:https://www.cnblogs.com/1439107348s/archive/2018/11/08/9927361.html
-Advertisement-
Play Games

開發工具vs2017 【註意項目名稱不要為log4net,否者在之後配置log4net出錯】 1】NuGet中引用Log4net包 2】添加web配置文件命名為log4new.config併在中寫入以下代碼 <?xml version="1.0" encoding="utf-8"?> <config ...


前言:

  幾乎所有的大型應用都會有自己的用於跟蹤調試的API。因為一旦程式被部署以後,就不太可能再利用專門的調試工具了。然而一個管理員可能需要有一套強大的日誌系統來診斷和修複配置上的問題。所以這個時候就需要一個記錄日誌的工具。log4net是.net中常用的一個日誌記錄工具,及那年先來介紹一下:

 

  開發工具vs2017

【註意項目名稱不要為log4net,否者在之後配置log4net出錯】

1】NuGet中引用Log4net包

2】添加web配置文件命名為log4new.config併在中寫入以下代碼

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net-net-1.2" />
  </configSections>
  <!--配置log4net--> 
  <log4net>
    <root>
    </root>
    <logger name="RollingLogFileAppender">
      <level value="ALL" />
      <appender-ref ref="RollingFileDebug" />
      <appender-ref ref="RollingFileInfo" />
      <appender-ref ref="RollingFileWarn" />
      <appender-ref ref="RollingFileError" />
      <appender-ref ref="RollingFileFatal" />
    </logger>
    <appender name="RollingFileDebug" type="log4net.Appender.RollingFileAppender">
      <!--文件路徑 如果不設置(去掉 value="Log/Debug/")會預設保存到[App_Data]文件夾中-->
      <param name="File" value="Log/Debug/"/>
      <!--追加到文件-->
      <param name="AppendToFile" value="true"/>
      <!--最多保留的文件數,設為"-1"則不限-->
      <param name="MaxSizeRollBackups" value="10"/>
      <!--寫到一個文件-->
      <param name="StaticLogFileName" value="false"/>
      <!--文件名,按日期命名-->
      <param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
      <!--創建日誌文件的方式,可選值:Date[日期],文件大小[Size],混合[Composite]-->
      <param name="RollingStyle" value="Date"/>
      <!--日誌格式-->
      <layout type="log4net.Layout.PatternLayout">
        <!--%newline輸出的日誌會換行 [%date{HH:mm:ss fff}]表示記錄的時間   -->
        <conversionPattern value="[%date{HH:mm:ss fff}] %- %message%newline" />
        <!--如果想自己設置格式就只需要-->
        <!--<conversionPattern value="%message"/>-->
      </layout>
      <lockingmodel type="log4net.appender.fileappender+minimallock" />
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="Debug" />
        <param name="LevelMax" value="Debug" />
      </filter>
    </appender>
    <appender name="RollingFileInfo" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="Log/Info/"/>
      <param name="AppendToFile" value="true"/>
      <param name="MaxSizeRollBackups" value="10"/>
      <param name="StaticLogFileName" value="false"/>
      <param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
      <param name="RollingStyle" value="Date"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="[%date{HH:mm:ss fff}] %- %message%newline" />
      </layout>
      <lockingmodel type="log4net.appender.fileappender+minimallock" />
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="INFO" />
        <param name="LevelMax" value="INFO" />
      </filter>
    </appender>
    <appender name="RollingFileWarn" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="Log/Warn/"/>
      <param name="AppendToFile" value="true"/>
      <param name="MaxSizeRollBackups" value="10"/>
      <param name="StaticLogFileName" value="false"/>
      <param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
      <param name="RollingStyle" value="Date"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="[%date{HH:mm:ss fff}] %- %message%newline" />
      </layout>
      <lockingmodel type="log4net.appender.fileappender+minimallock" />
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="WARN" />
        <param name="LevelMax" value="WARN" />
      </filter>
    </appender>
    <appender name="RollingFileError" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="Log/Error/"/>
      <param name="AppendToFile" value="true"/>
      <param name="MaxSizeRollBackups" value="10"/>
      <param name="StaticLogFileName" value="false"/>
      <param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
      <param name="RollingStyle" value="Date"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="[%date{HH:mm:ss fff}] %- %message%newline" />
      </layout>
      <lockingmodel type="log4net.appender.fileappender+minimallock" />
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="ERROR" />
        <param name="LevelMax" value="ERROR" />
      </filter>
    </appender>
    <appender name="RollingFileFatal" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="Log/Fatal/"/>
      <param name="AppendToFile" value="true"/>
      <param name="MaxSizeRollBackups" value="10"/>
      <param name="StaticLogFileName" value="false"/>
      <param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
      <param name="RollingStyle" value="Date"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="[%date{HH:mm:ss fff}] %- %message%newline" />
      </layout>
      <lockingmodel type="log4net.appender.fileappender+minimallock" />
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="FATAL" />
        <param name="LevelMax" value="FATAL" />
      </filter>
    </appender>

  </log4net> 
</configuration>
View Code

 

3】在Global.asax中添加代碼 

//配置log4
log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(Server.MapPath("~/Web.config")));
View Code

 

 4】寫一個 LogHelper.cs但是註意在這個.cs文件的命名空間寫上 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

註意ConfigFile 後面跟的是配置文件的相對路徑

 

LogHelper代碼

    public class LogHelper
    {
        public static readonly ILog Log = LogManager.GetLogger("RollingLogFileAppender");
 

        //        log4j定義了8個級別的log(除去OFF和ALL,可以說分為6個級別),優先順序從高到低依次為:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。 
        //ALL 最低等級的,用於打開所有日誌記錄。
        //DEBUG 指出細粒度信息事件對調試應用程式是非常有幫助的,主要用於開發過程中列印一些運行信息。 
        //INFO 消息在粗粒度級別上突出強調應用程式的運行過程。列印一些你感興趣的或者重要的信息,這個可以用於生產環境中輸出程式運行的一些重要信息,
        //WARN 表明會出現潛在錯誤的情形,有些信息不是錯誤信息,但是也要給程式員的一些提示。
        //ERROR 指出雖然發生錯誤事件,但仍然不影響系統的繼續運行。列印錯誤和異常信息,如果不想輸出太多的日誌,可以使用這個級別。
        //FATAL 指出每個嚴重的錯誤事件將會導致應用程式的退出。這個級別比較高了。重大錯誤,這種級別你可以直接停止程式了。

        //TRACE designates finer-grained informational events than the DEBUG.Since:1.2.12,很低的日誌級別,一般不會使用。  
        //OFF 最高等級的,用於關閉所有日誌記錄。
        //如果將log level設置在某一個級別上,那麼比此級別優先順序高的log都能列印出來。例如,如果設置優先順序為WARN,那麼OFF、FATAL、ERROR、WARN 4個級別的log能正常輸出,而INFO、DEBUG、TRACE、 ALL級別的log則會被忽略。Log4j建議只使用四個級別,優先順序從高到低分別是ERROR、WARN、INFO、DEBUG。

        #region DEBUG 指出細粒度信息事件對調試應用程式是非常有幫助的,主要用於開發過程中列印一些運行信息。 
        public static void debug(string write)
        {

            Log.Debug("日誌記錄:" + write);
        }
        public static void debug(string write, Exception ex)
        {
            Log.Debug("日誌記錄:" + write + "。錯誤記載:" + ex.ToString());
        }
        #endregion
        #region INFO 消息在粗粒度級別上突出強調應用程式的運行過程。列印一些你感興趣的或者重要的信息,這個可以用於生產環境中輸出程式運行的一些重要信息,
        /// <summary>
        /// 1
        /// </summary>
        /// <param name="write"></param>
        public static void Info(string write)
        {
            Log.Info("日誌記錄:" + write);
        }
        public static void Info(string write, Exception ex)
        {
            Log.Info("日誌記錄:" + write + "。錯誤記載:" + ex.ToString());
        }
        #endregion
        #region WARN 表明會出現潛在錯誤的情形,有些信息不是錯誤信息,但是也要給程式員的一些提示。,可以使用這個級別。
        public static void warn(string write)
        {
            Log.Warn("日誌記錄:" + write);
        }
        public static void warn(string write, Exception ex)
        {
            Log.Warn("日誌記錄:" + write + "。錯誤記載:" + ex.ToString());
        }
        #endregion

        #region ERROR 指出雖然發生錯誤事件,但仍然不影響系統的繼續運行。列印錯誤和異常信息,如果不想輸出太多的日誌,可以使用這個級別。
        public static void error(string write)
        {
            Log.Error("日誌記錄:" + write);
        }
        public static void error(string write, Exception ex)
        {
            Log.Error("日誌記錄:" + write + "。錯誤記載:" + ex.ToString());
        }
        #endregion
        #region FATAL 指出每個嚴重的錯誤事件將會導致應用程式的退出。這個級別比較高了。重大錯誤,這種級別你可以直接停止程式了。
        public static void fatal(string write)
        {
            Log.Fatal("日誌記錄:" + write);
        }
        public static void fatal(string write, Exception ex)
        {
            Log.Fatal("日誌記錄:" + write + "。錯誤記載:" + ex.ToString());
        }
        //#endregion


        #endregion



        //定義輸出的日誌內容
        public static string logMessage(SysLogMsg logMessage)
        {
            StringBuilder strInfo = new StringBuilder();
            strInfo.Append("\r\n1. 錯誤: >> 操作時間: " + logMessage.OperationTime + "   操作人: " + logMessage.UserName + " \r\n");
            strInfo.Append("2. 類名: " + logMessage.Class + " \r\n");
            strInfo.Append("3. 內容: " + logMessage.Content + "\r\n");
            strInfo.Append("-----------------------------------------------------------------------------------------------------------------------------\r\n");
            return strInfo.ToString();
        }
    }
View Code

 

5】最後可以開始寫日誌  ,可以自己定義一種日誌格式【自己寫一個model,定義幾個參數  時間、操作人、類名等等】

 

 

 最後根據log4new.config設置的路徑找到日誌所在【未定義的話一般在項目的bin/Debug 或者 bin/Release目錄下】  第一個是預設格式日誌,第二個是自己定的格式日誌【都是string類型,只不過第二個使用\t\n換行,稍微美化一下輸出格式】

  <param name="File" value="Log/Debug/"/>  表示在當前文件夾Log/Debug中

 

 

 最後附上githup地址


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

-Advertisement-
Play Games
更多相關文章
  • 連接SqlServer 2008R2資料庫超時 .Net Core 在 Linux 下連接 SqlServer 需要 SqlServer2008 SP3或以上版本,或SqlServer2012,或SqlServer2014. 如果SqlServer2008低於SP3版本,會出現連接超時的問題。 解決 ...
  • 進入自動化行業半年多了,每天都與機器打交道。 前段時間接手一個任務,需要將我們機台與下站機台進行通訊,我們機台是PC,下站機台為西門子S7-1200。 想想完成這個任務,領導就會對我這個新人刮目相看,然後升職加薪!嘿嘿哈哈哈嗝 首先,知己知彼方能百戰不殆。 於是找到西門子論壇,http://www. ...
  • 當我們使用vs2013創建mvc項目時,當你運行index頁面時會出現一個錯誤。錯誤圖如下: 可能會讓我們一頭霧水,什麼也沒做就報錯。 那麼我們可以這麼解決。 首先我們打開項目>引用 找到 System.Web.Mvc 如果這裡找不到我們可以去 右鍵 ”引用“ 點擊:”添加引用“ 左側 "框架" 里 ...
  • 簡介 ​ 學習.NETCORE也有1年多時間了,發現.NETCORE項目實戰系列教程很少,都是介紹開源項目或基礎教程,對於那些觀望的朋友不能形成很好的學習思路,遇到問題怕無法得到解決而不敢再實際項目中嘗試,今天我想通過項目系列實戰的方式,進一步推廣應用.NETCORE,讓大家感受它的魅力以及已經無所 ...
  • 添加測試類: 1.判斷是否實現了指定介面 2.判斷是否繼承了指定基類 3.判斷是否重寫了基類方法 獲取指定方法的信息後,可以通過DeclaringType-聲明此方法的成員類信息,判斷與當前類信息是否一致。 4.判斷類A是否為類B的嵌套類 測試: 5. 類/介面的訪問類型 判斷類A是否可被類B繼承 ...
  • 在前面隨筆《基於Metronic的Bootstrap開發框架--工作流模塊功能介紹》和《基於Metronic的Bootstrap開發框架--工作流模塊功能介紹(2)》中介紹了Bootstrap開發框架的工作模塊功能,前面文章也提及,通過代碼生成工具直接生成對應的Create、ViewDetail、I... ...
  • Pipelines - .NET中的新IO API指引 作者 marcgravell 原文 此系列前兩篇網上已有的譯文 Pipelines - .NET中的新IO API指引(一) Pipelines - .NET中的新IO API指引(二) 關於System.IO.Pipelines的一篇說明 S ...
  • 在使用ado.net的SqlDataReader對象時,如果SqlDataReader實例對象中沒有對應的欄位,則會在那一行報錯.而SqlDataReader類又沒有判斷是否存在指定欄位的方法,怎麼辦呢? 我們只好自己寫個判斷是否包含指定欄位的方法了... 上代碼: 本人在網上搜索了很多方法,個人認 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...