程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#完成Log4Net日記分類和主動保護實例

C#完成Log4Net日記分類和主動保護實例

編輯:C#入門知識

C#完成Log4Net日記分類和主動保護實例。本站提示廣大學習愛好者:(C#完成Log4Net日記分類和主動保護實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C#完成Log4Net日記分類和主動保護實例正文


本文實例講述了C#完成Log4Net日記分類和主動保護的完成辦法。分享給年夜家供年夜家參考。詳細完成辦法以下:

1、配景

在法式中,我們調試運轉時信息,Log4Net是一個不錯的處理計劃。不曉得是我用的欠好,用到最初反而都不想看日記了。緣由是由於我n個功效應用的默許的Logger來記載日記,如許以來,一切功效記載的信息都依附統一個設置裝備擺設,因而一切的信息都在一個文件中,有時刻查找起來,極端不便利。

我想,能不克不及依照功效分類呢?假如經由過程設置裝備擺設分歧的logger,然後功效依據分歧的LoggerName加載Ilog實例,是可以做到。但因為這些功效的log設置裝備擺設差別性極小,或許僅僅就是文件名分歧。因而想經由過程代碼停止設置裝備擺設。

2、處理計劃

想來如許的需求應當也算正常,但經由查找,發明在log4j中有相干的征詢,但看不懂,只能本身下載log4net的源碼,看看它的運轉道理。

假如我們須要經由過程設置裝備擺設分歧的ILog,流程是如許的,起首要創立一個ILoggerRepository,經由過程它來停止日記品級的設置裝備擺設,和各類Appender,接著經由過程LogManager在ILoggerRepository獲得一個Ilog對象,便可以寫日記了。代碼以下:

public static ILog GetLogger(string repositoryName = "")
{
    if (string.IsNullOrEmpty(repositoryName)) return LogManager.GetLogger("Defalut");

    ILoggerRepository repository = null;
    try
    {
 repository = LogManager.GetRepository(repositoryName);
    }
    catch (Exception) { }

    //找到直接前往ilog
    if (repository != null)
 return LogManager.GetLogger(repositoryName, "Defalut");

    //未找到則創立,多線程下很有能夠創立時,就存在了
    try
    {
 repository = LogManager.CreateRepository(repositoryName);
    }
    catch (Exception)
    {
 repository = LogManager.GetRepository(repositoryName);
    }

    //設置裝備擺設日記品級  讀取Appsettings默許設置裝備擺設 
    var appSet = ConfigurationManager.AppSettings.AllKeys;

    //查找日記品級
    const string logLevel = "LogLevel";
    var hasSettings = Array.IndexOf(appSet, logLevel);
    if (hasSettings > -1)
    {
 var level = ConfigurationManager.AppSettings[logLevel].ToLower();
 if (level == "all") repository.Threshold = Level.All;
 else if (level == "debug") repository.Threshold = Level.Debug;
 else if (level == "info") repository.Threshold = Level.Info;
 else if (level == "warn") repository.Threshold = Level.Warn;
 else if (level == "error") repository.Threshold = Level.Error;
 else if (level == "fatal") repository.Threshold = Level.Fatal;
 else if (level == "off") repository.Threshold = Level.Off;
    }
    else repository.Threshold = Level.All;

    //查找輸入Appender
    const string logAppender = "LogAppender";
    hasSettings = Array.IndexOf(appSet, logAppender);
    if (hasSettings > -1)
    {
 var appenders = ConfigurationManager.AppSettings[logAppender].ToLower().Split(',');
 foreach (var appender in appenders)
 {
     if (appender == "rollingfile") LoadRollingFileAppender(repository);
     else if (appender == "console") LoadConsoleAppender(repository);
     else if(appender == "trace") LoadTraceAppender(repository);
 }
    }
    else LoadRollingFileAppender(repository);

    return LogManager.GetLogger(repositoryName, "Default");
}

Log4net 會主動保護ILog和ILoggerRepository,所以不消保留,經由過程LogManger獲得便可。然則我沒有找到辦法來查找指定的ILoggerRepository能否存在,所以在上述代碼中經由過程try catch停止斷定。因為我們是經由過程代碼方法設置裝備擺設log4net,但仍然願望經由過程設置裝備擺設來設置日記品級和輸入類型,所以我選擇在Appsettings文件中停止設置裝備擺設,一次設置裝備擺設,針對一切的ILoggerRepository都失效。之所以不是針對每個功效停止設置裝備擺設,重要是因為設置裝備擺設費事,並且假如真要這麼做,直接在log4net中設置裝備擺設分歧的logger,經由過程loggername援用,能夠會更好些。

3、日記保護

因而接上去的成績是,若何刪除日記?

log4net可以設置裝備擺設RollingFileAppender,翻譯過去是轉動文件。經由過程設置MaximumFileSize和MaxSizeRollBackups 2個參數可以完成如許的目標,該日記文件每到達必定年夜小就會發生一個新文件,文件最年夜總數則為MaxSizeRollBackups,但條件的是文件名分歧。

好比我們采取以下設置裝備擺設:

<!--RollingFileAppender:輸入到文件中-->
<appender name="SysAppender" type="log4net.Appender.RollingFileAppender">
      <!--日記的途徑-->
      <file value="Logs/" />
      <!--能否籠罩,默許是追加true-->
      <appendToFile value="true"/>
      <!--不占用日記文件過程-->
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <rollingStyle value="Composite"/>
      <!--文件稱號-->
      <DatePattern value="yyyy-MM-dd HH'時.log'"></DatePattern>
      <!--設置無窮備份=-1 ,最年夜備份數為1000-->
      <param name="MaxSizeRollBackups" value="1000"/>
      <!--每一個文件的年夜小-->
      <param name="MaximumFileSize" value="500KB"/>
      <!--稱號能否可以更改 為false為可以更改-->
      <param name="StaticLogFileName" value="false"/>
      <layout type="log4net.Layout.PatternLayout">
        <!--輸入格局-->
        <conversionPattern value="%n【記載時光】%date%n【描寫】%message%n"/>
      </layout>
</appender>

後果則是 日記以小時為單元,每小時最年夜備份總數為1000,每到500kb後構成日記文件。當跟著天數的增長,文件也開端變多,須要我們本身去清算。所以上述設置裝備擺設可以略微改下:

<!--RollingFileAppender:輸入到文件中-->
<appender name="SysAppender" type="log4net.Appender.RollingFileAppender">
      <!--日記的途徑-->
      <file value="Logs/日記.log" />
      <!--能否籠罩,默許是追加true-->
      <appendToFile value="true"/>
      <!--不占用日記文件過程-->
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <rollingStyle value="Composite"/>
      <!--文件稱號-->
      <DatePattern value="yyyy-MM-dd HH'時.log'"></DatePattern>
      <!--設置無窮備份=-1 ,最年夜備份數為1000-->
      <param name="MaxSizeRollBackups" value="1000"/>
      <!--每一個文件的年夜小-->
      <param name="MaximumFileSize" value="500KB"/>
      <!--稱號能否可以更改 為false為可以更改-->
      <param name="StaticLogFileName" value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <!--輸入格局-->
        <conversionPattern value="%n【記載時光】%date%n【描寫】%message%n"/>
      </layout>
</appender>

重要是設置了日記文件名,並且是靜態稱號,不許可更改。如許以來,日記文件最多只要1000個了,就不消手工保護了,你會看到如許的日記文件名:

日記.log   日記.log.1  日記.log.2   ... 默許是文件名最初的數字越年夜,時光最老,所以檢查新日記,重要是在 第一個文件名 中。

別的提示下:假如設置Appender應用了靜態文件名,那末汗青日記會被籠罩,而極端在乎汗青日記的運用,建議不要應用此計劃,清算日記的話,照樣老誠實實寫代碼吧。

完全實例代碼點擊此處本站下載。

願望本文所述對年夜家的C#法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved