最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# 使用 log4net 日志組件的方法

 更新時(shí)間:2020年12月31日 17:06:16   作者:Dwaynerbing  
這篇文章主要介紹了C# 使用 log4net 日志組件的方法,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下

一、 什么是 log4net 

      Apache log4net 庫(kù)是幫助程序員將日志語(yǔ)句輸出到各種輸出目標(biāo)的工具,它是從Java中的Log4j遷移過(guò)來(lái)的一個(gè).Net版的開(kāi)源日志框架。log4net 的一個(gè)顯著特征是分層記錄器的概念,使用這些記錄器可以有選擇地控制任意粒度輸出日志語(yǔ)句。主要特征如下:

  • 支持多個(gè)框架
  • 輸出到多個(gè)日志記錄目標(biāo)
  • 分層日志記錄體系結(jié)構(gòu)
  • XML 配置
  • 動(dòng)態(tài)配置
  • 日志記錄上下文
  • 久經(jīng)考驗(yàn)的架構(gòu)
  • 模塊化和可擴(kuò)展設(shè)計(jì)
  • 高性能和靈活性   

二、C# 使用 log4net

       添加Nuget 包,搜索到“l(fā)og4net”后 ,選擇安裝,具體如下圖所示:

三、添加 log4net 配置文件

 使用 log4net需要我們配置log4net的配置文件,目前,配置文件是用 XML 編寫(xiě)的。一般有兩種方式,一種是使用og4net自動(dòng)生成的 “l(fā)og4net.xml”進(jìn)行配置,另一種是直接嵌入到運(yùn)行程序的 app.config 文件中。   

 具體內(nèi)容如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <configSections>
  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
 </configSections>
 <startup>
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
 </startup>
 <log4net>
  <!-- OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL -->
  <!-- Set root logger level to ERROR and its appenders -->
  <root>
   <level value="ALL" />
   <appender-ref ref="SysAppender" />
  </root>
  <!-- Print only messages of level DEBUG or above in the packages -->
  <logger name="WebLogger">
   <level value="DEBUG" />
  </logger>
  <appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net">
   <param name="File" value="log/" />
   <param name="AppendToFile" value="true" />
   <param name="RollingStyle" value="Date" />
   <param name="DatePattern" value="'demo_'yyyy_MM_dd-HH'.log'" />
   <param name="StaticLogFileName" value="false" />
   <param name="RollingStyle" value="Composite" />
   <layout type="log4net.Layout.PatternLayout,log4net">
    <param name="ConversionPattern" value="%date [th=%3thread] [line:%5L] [%-5level] %message%newline"/>
   </layout>
  </appender>
  <appender name="consoleApp" type="log4net.Appender.ConsoleAppender,log4net">
   <layout type="log4net.Layout.PatternLayout,log4net">
    <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
   </layout>
  </appender>
 </log4net>
</configuration>

主要參數(shù)含義如下:

三、源碼測(cè)試

       我們可以添加一個(gè)日志類(lèi),專(zhuān)門(mén)用于輸出日志打印,具體代碼如下(注意:log4net目前暫時(shí)不支持通過(guò)配置文件進(jìn)行文件刪除,可通過(guò)配置文件設(shè)置文件個(gè)數(shù)與大小進(jìn)行覆蓋備份文件。因此,自動(dòng)刪除日志需要代碼實(shí)現(xiàn)):

public static class LogUtil
  {
    private static log4net.ILog Log { get; } = log4net.LogManager.GetLogger("log");

    /// <summary>
    /// 日志加載設(shè)置
    /// </summary>
    /// <param name="exeConfigFile">日志配置文件名稱(chēng)</param>
    /// <param name="day">保留天數(shù),-1表示不刪除</param>
    public static void Configure(string exeConfigFile,int day=-1)
    {
      log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(exeConfigFile));
      if (day == -1) return;
      var files = new System.IO.DirectoryInfo("log").GetFiles();
      foreach (var file in files)
      {
        // 定時(shí)刪除日志文件
        if ((DateTime.Now - file.CreationTime).TotalDays > day)
        {
          file.Delete();
        }
      }
    }

    private static string GetMethodName(int skipFrames = 2)
    {
      try
      {
        // 這里忽略skipFrames層堆棧,也就忽略了當(dāng)前方法GetMethodName,以及調(diào)用此方法的方法,這樣拿到的就正好是外部調(diào)用打印日志所在函數(shù)的方法信息
        var method = new StackFrame(skipFrames).GetMethod();
        var properties =
          method?.DeclaringType?.GetProperties(
            BindingFlags.Instance |
            BindingFlags.Static |
            BindingFlags.Public |
            BindingFlags.NonPublic);
        var property = properties?.Where(p => p.GetGetMethod(true) == method || p.GetSetMethod(true) == method)
          .FirstOrDefault();

        var name = $"{method?.DeclaringType?.ToString().Split('.').Last()}.{method?.Name}";
        return property == null
          ? $"{name,-50}"
          : $"{property.Name,-50}";
      }
      catch (Exception e)
      {
        return "ERROR TO GET CALLING METHOD";
      }
    }
    private static string NoWarp(string msg)
    {
      return msg?.Replace("\r\n", " ").Replace("\n", " ");
    }
    private static string WrapException(string msg, Exception e)
    {
      var builder = new StringBuilder(msg);
      builder.Append("\t[").Append(e.Message).Append("]");
      if (e.InnerException != null)
      {
        builder.Append(" --> [").Append(e.InnerException.Message).Append("]");
      }

      return builder.ToString();
    }




    public static void Debug(string msg)
    {
      Log.Debug(msg);
    }
    public static void Debug(string msg, Exception e)
    {
      Log.Debug(WrapException(msg, e), e);
    }

    public static void Info(string msg)
    {
      Log.Info(msg);
    }
    public static void Info(string msg, Exception e)
    {
      Log.Info(WrapException(msg, e), e);
    }

    public static void Warn(string msg)
    {
      Log.Warn(msg);
    }
    public static void Warn(string msg, Exception e)
    {
      Log.Warn(WrapException(msg, e), e);
    }

    public static void Error(string msg)
    {
      Log.Error(msg);
    }
    public static void Error(string msg, Exception e)
    {
      Log.Error(WrapException(msg, e), e);
    }

    public static void Fatal(string msg)
    {
      Log.Fatal(msg);
    }
    public static void Fatal(string msg, Exception e)
    {
      Log.Fatal(WrapException(msg, e), e);
    }
  }

 測(cè)試代碼如下:

static void Main(string[] args)
    {
      try
      {
        string exeConfigFile = $"{AppDomain.CurrentDomain.BaseDirectory}//Log4netDemo.exe.config";

        if (File.Exists(exeConfigFile) == false)
        {
          throw new Exception($"應(yīng)用程序配置文件 [{exeConfigFile}] 不存在,無(wú)法加載日志 log4net 的配置");
        }

        LogUtil.Configure(exeConfigFile,1);
        LogUtil.Info("====================================== Log4netDemo started, log4net setup...");
        LogUtil.Warn("程序啟動(dòng)入?yún)⒉缓侠?);
        LogUtil.Error("程序啟動(dòng)失敗");

        Console.ReadKey();
      }
      catch (Exception ex)
      {
        Console.WriteLine(ex);
        LogUtil.Error("程序加載失敗",ex);
      }
    }

運(yùn)行程序后,實(shí)際輸出效果如下:

以上就是C# 使用 log4net 日志組件的方法的詳細(xì)內(nèi)容,更多關(guān)于C# 使用 log4net 日志組件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#修改及重置電腦密碼DirectoryEntry實(shí)現(xiàn)方法

    C#修改及重置電腦密碼DirectoryEntry實(shí)現(xiàn)方法

    這篇文章主要介紹了C#修改及重置電腦密碼DirectoryEntry實(shí)現(xiàn)方法,實(shí)例分析了C#修改及重置電腦密碼的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • c# 通過(guò)代碼開(kāi)啟或關(guān)閉防火墻

    c# 通過(guò)代碼開(kāi)啟或關(guān)閉防火墻

    這篇文章主要介紹了c# 通過(guò)代碼開(kāi)啟或關(guān)閉防火墻的示例,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-10-10
  • C#獲取文件夾下所有的文件

    C#獲取文件夾下所有的文件

    這篇文章主要為大家詳細(xì)介紹了C#中獲取文件夾下所有的文件的多種方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-10-10
  • C#實(shí)現(xiàn)簡(jiǎn)單串口通訊實(shí)例

    C#實(shí)現(xiàn)簡(jiǎn)單串口通訊實(shí)例

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)簡(jiǎn)單串口通訊的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 關(guān)于C# 類(lèi)的封裝詳情

    關(guān)于C# 類(lèi)的封裝詳情

    C#中可使用類(lèi)來(lái)達(dá)到數(shù)據(jù)封裝的效果,這樣就可以使數(shù)據(jù)與方法封裝成單一元素,以便于通過(guò),接下來(lái)小編將為大家詳細(xì)介紹,需要的朋友可以參考一下
    2021-10-10
  • c# 控件截圖的簡(jiǎn)單實(shí)例

    c# 控件截圖的簡(jiǎn)單實(shí)例

    這篇文章介紹了c# 控件截圖的簡(jiǎn)單實(shí)例,有需要的朋友可以參考一下
    2013-10-10
  • 利用C#實(shí)現(xiàn)在Word中更改字體顏色

    利用C#實(shí)現(xiàn)在Word中更改字體顏色

    在日常工作中,我們有時(shí)會(huì)需要修改字體的顏色來(lái)突出文本重點(diǎn),讓讀者更容易抓住文章要點(diǎn)。在今天這篇文章中,我將為大家介紹如何以編程方式,在Word更改字體顏色,感興趣的可以了解一下
    2023-02-02
  • c#如何利用定時(shí)器自動(dòng)備份數(shù)據(jù)庫(kù)詳解

    c#如何利用定時(shí)器自動(dòng)備份數(shù)據(jù)庫(kù)詳解

    在開(kāi)發(fā)過(guò)程當(dāng)中,你一定遇到文件損壞活或丟失的煩惱,而每天備份又很麻煩,你只要設(shè)置每天備份的時(shí)間,并將程序加入啟動(dòng)項(xiàng)中,就可以自動(dòng)完成備份,這篇文章主要給大家介紹了關(guān)于c#如何利用定時(shí)器自動(dòng)備份數(shù)據(jù)庫(kù)的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • C#中DataGridView動(dòng)態(tài)添加行及添加列的方法

    C#中DataGridView動(dòng)態(tài)添加行及添加列的方法

    這篇文章主要介紹了C#中DataGridView動(dòng)態(tài)添加行及添加列的方法,涉及C#中DataGridView針對(duì)行與列動(dòng)態(tài)操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • 提示出現(xiàn)unresolved external symbol _main的解決方法

    提示出現(xiàn)unresolved external symbol _main的解決方法

    提示出現(xiàn)unresolved external symbol _main的解決方法...
    2007-11-11

最新評(píng)論

湖北省| 闸北区| 泌阳县| 汝州市| 准格尔旗| 封丘县| 洛扎县| 尉氏县| 三门峡市| 十堰市| 万源市| 梁河县| 丹巴县| 冕宁县| 八宿县| 太和县| 通道| 茶陵县| 鄂尔多斯市| 平阳县| 禄丰县| 龙胜| 托克逊县| 延安市| 韶山市| 农安县| 桦川县| 汉中市| 桂东县| 蕉岭县| 莲花县| 全州县| 扶余县| 太原市| 宜春市| 大英县| 丰台区| 冕宁县| 汉川市| 深水埗区| 阳朔县|