log 4 net教程日誌の分類と自動メンテナンスの例

6718 ワード

もし私たちが異なる設定をする必要があるなら、まずILogger Repositoryを作成し、それを通じてログレベルの設定を行い、各種のApplenderとLogManagerを通じてIIloger RepositoryでIlogMerオブジェクトを取得してログを書くことができます。コードは以下の通りです

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");
        }

Log 4 netは自動的にILogとILogger Repositoryをメンテナンスしますので、保存せずにLogMangerで取得すればいいです。しかし、指定されたILoggarr Repositoryが存在するかどうかを調べる方法が見つからないので、上記のコードの中でtry catchで判断します。コードでlogs 4 netを構成していますが、設定によってログレベルと出力タイプを設定したいので、Appletingsファイルの中で配置を選択します。一回の構成では、すべてのIlogter Repositoryに対して有効になります。各機能に対して配置していないのは、配置が面倒なためであり、実際にそうするならば、直接にロゴ4 netに異なるロゴを配置し、loggernameを通じて参照すれば、より良いかもしれない。
ログのメンテナンス
そこで次の問題は、日記をどうやって削除しますか?
log 4 netはRollingFileApppenderを配置できます。翻訳はスクロールファイルです。MaximFileSizeとMaxSize RollBackupの2つのパラメータを設定することにより、このような目的を達成することができます。ログファイルは一定のサイズに達するごとに新しいファイルが作成されます。ファイルの最大総数はMaxSizerRollBackupですが、ファイル名が一致することが前提です。
例えば、私達は以下のような構成を採用します。

<!--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>
効果はログが時間単位で、1時間あたりの最大バックアップ総数は1000元で、500 kbに達するごとにログファイルが作成されます。日数が増えるにつれて、書類も多くなり始めます。自分で整理します。このような配置は少し変えられます。

<!--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.1  ログ.log.2   ... デフォルトはファイル名の最後の数字が大きいほど古いので、新しいログを見ると、主に最初のファイル名になります。また、Applenderを設定して静的なファイル名を使うと、歴史的なログが上書きされます。歴史的なログの応用がとても気になります。この方案を使わないでください。ログを整理したら、コードを正直に書いてください。