From: くまかみ工房 Date: Mon, 12 Jun 2017 07:46:23 +0000 (+0900) Subject: ログローテーション機能を追加。 X-Git-Url: http://git.osdn.net/view?p=strokestylet%2FCsWin10Desktop3.git;a=commitdiff_plain;h=ff3017305a7ba8cca4439f98427eb481b348f23f ログローテーション機能を追加。 Log.ログファイル名を生成する() で実現。 --- diff --git a/FDK/Log.cs b/FDK/Log.cs index d2e5837..6e2612d 100644 --- a/FDK/Log.cs +++ b/FDK/Log.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.IO; +using System.Linq; namespace FDK { @@ -92,6 +94,40 @@ namespace FDK } } + /// + /// 指定されたフォルダ内に配置可能な、新しいログファイル名を生成して返す。 + /// + /// ログファイルを配置するフォルダのパス。 + /// ログファイル名に付与する接頭辞。 + /// フォルダ内に保存しておく最大の期間。 + /// 生成されたログファイル名。パス付き。 + /// + /// ログファイル名は、現在時刻をベースに名付けられる。 + /// 同時に、フォルダ内に存在するすべてのファイルの生成時刻をチェックし、最大保存期間を超える古いファイルは、自動的に削除する。 + /// + public static string ログファイル名を生成する( string ログフォルダパス, string ログファイルの接頭辞, TimeSpan 最大保存期間 ) + { + var 現在の時刻 = DateTime.Now; + + if( Directory.Exists( ログフォルダパス ) ) + { + // (A) フォルダがある場合 → 最大保存期間を超える古いファイルを削除する。 + var 削除対象ファイルs = Directory.GetFiles( ログフォルダパス ).Where( + ( file ) => ( File.GetCreationTime( file ) < ( 現在の時刻 - 最大保存期間 ) ) ); + + foreach( var path in 削除対象ファイルs ) + File.Delete( path ); + } + else + { + // (B) フォルダがない場合 → 作成する。 + Directory.CreateDirectory( ログフォルダパス ); + } + + // 現在の時刻をもとに、新しいログファイル名を生成して返す。 + return Path.Combine( ログフォルダパス, $"{ログファイルの接頭辞}{現在の時刻.ToString("yyyyMMdd-HHmmssffff")}.txt" ); + } + internal static void BeginInfo( string 開始ブロック名 ) {