OSDN Git Service

ログローテーション機能を追加。
authorくまかみ工房 <kumakamikoubou@gmail.com>
Mon, 12 Jun 2017 07:46:23 +0000 (16:46 +0900)
committerくまかみ工房 <kumakamikoubou@gmail.com>
Mon, 12 Jun 2017 07:46:23 +0000 (16:46 +0900)
Log.ログファイル名を生成する() で実現。

FDK/Log.cs

index d2e5837..6e2612d 100644 (file)
@@ -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
                        }
                }
 
+               /// <summary>
+               ///             指定されたフォルダ内に配置可能な、新しいログファイル名を生成して返す。
+               /// </summary>
+               /// <param name="ログフォルダパス">ログファイルを配置するフォルダのパス。</param>
+               /// <param name="ログファイルの接頭辞">ログファイル名に付与する接頭辞。</param>
+               /// <param name="最大保存期間">フォルダ内に保存しておく最大の期間。</param>
+               /// <returns>生成されたログファイル名。パス付き。</returns>
+               /// <remarks>
+               ///             ログファイル名は、現在時刻をベースに名付けられる。
+               ///             同時に、フォルダ内に存在するすべてのファイルの生成時刻をチェックし、最大保存期間を超える古いファイルは、自動的に削除する。
+               /// </remarks>
+               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 開始ブロック名 )
                {