private static void DebugWrite(string message, LoggingData data) { foreach (string msg in data.ToStrings()) { System.Diagnostics.Debug.WriteLine(message + " " + msg); } }
/// <summary> /// ログ書き込み・ログバッファ消去 /// </summary> /// <param name="log">ログデータ</param> /// <param name="logName1">ログファイル名</param> /// <param name="logName2">ログファイル名(リネーム用)</param> private static async Task WriteLogBufferToFileAsync(LoggingData log, string logName1, string logName2) { StorageFolder logFolder = await ApplicationData.Current.LocalFolder.CreateFolderAsync(Settings.Folder, CreationCollisionOption.OpenIfExists); if (Settings.LoggingMode == LoggingModes.Size) { // サイズチェック try { StorageFile cf = await logFolder.GetFileAsync(logName1); BasicProperties bprop = await cf.GetBasicPropertiesAsync(); if (bprop.Size > (ulong)Settings.MaxFileSizeKB * 1024) { // サイズオーバー DebugWrite("]]>!! SIZE OVER !!"); try { StorageFile df = await logFolder.GetFileAsync(logName2); await df.DeleteAsync(); } catch (FileNotFoundException) { // ファイルなし } await cf.RenameAsync(logName2); } } catch (FileNotFoundException) { // ファイルなし } } else { // ファイル日付チェック try { StorageFile cf = await logFolder.GetFileAsync(logName1); BasicProperties bprop = await cf.GetBasicPropertiesAsync(); TimeSpan dtdiff = bprop.DateModified.Subtract(log.DateTime); bool fileChear = false; switch (Settings.LoggingMode) { case LoggingModes.Day: case LoggingModes.Week: // ログデータ日時とログファイル更新日時差が1日越で1周したとみなす if (dtdiff.Days > 1) { fileChear = true; } break; case LoggingModes.Month: // ログデータ日時とログファイル更新日時差が31日越で1周したとみなす if (dtdiff.Days > 31) { fileChear = true; } break; } if (fileChear) { DebugWrite("]]>!! FILE CLEAR !!"); StorageFile df = await logFolder.GetFileAsync(logName1); await df.DeleteAsync(); } } catch (FileNotFoundException) { // ファイルなし } } var sf = await logFolder.CreateFileAsync(logName1, Windows.Storage.CreationCollisionOption.OpenIfExists); DebugWrite("]]>", sf.Path, lastFilename); // 書き込み await FileIO.AppendLinesAsync(sf, new List <string>(log.ToStrings())); // タイムスタンプ変更 if (Internal.DateTime.DifferenceNow.Ticks != 0) { // できません } lastFilename = sf.Path; WriteQueueCount--; }
/// <summary> /// ログ書き込み・ログバッファ消去 /// </summary> /// <param name="log">ログデータ</param> /// <param name="logName1">ログファイル名</param> /// <param name="logName2">ログファイル名(リネーム用)</param> #pragma warning disable CS1998 // 非同期メソッドは、'await' 演算子がないため、同期的に実行されます private static async Task WriteLogBufferToFileAsync(LoggingData log, string logName1, string logName2) #pragma warning restore CS1998 // 非同期メソッドは、'await' 演算子がないため、同期的に実行されます { Uri appUri = new(Path.GetDirectoryName(Core.StartupPath)); Uri outUri = new(appUri, Environment.ExpandEnvironmentVariables(LoggingSettings.Folder)); string logFolder = outUri.LocalPath; // フォルダー作成 if (Directory.Exists(logFolder) == false) { Directory.CreateDirectory(logFolder); } if (LoggingSettings.LoggingMode == LoggingMode.Size) { // サイズチェック try { FileInfo fi = new(logFolder + @"\" + logName1); if (fi.Length > (long)LoggingSettings.MaxFileSizeKB * 1024) { // サイズオーバー DebugWrite("]]>!! SIZE OVER !!"); try { File.Delete(logFolder + @"\" + logName2); } catch (FileNotFoundException) { // ファイルなし } File.Move(logFolder + @"\" + logName1, logFolder + @"\" + logName2); } } catch (FileNotFoundException) { // ファイルなし } } else { // ファイル日付チェック try { System.DateTime fd = System.IO.File.GetLastWriteTime(logFolder + @"\" + logName1); TimeSpan dtdiff = fd.Subtract(log.DateTime); bool fileChear = false; switch (LoggingSettings.LoggingMode) { case LoggingMode.Day: case LoggingMode.Week: // ログデータ日時とログファイル更新日時差が1日越で1周したとみなす if (dtdiff.Days > 1) { fileChear = true; } break; case LoggingMode.Month: // ログデータ日時とログファイル更新日時差が31日越で1周したとみなす if (dtdiff.Days > 31) { fileChear = true; } break; } if (fileChear) { DebugWrite("]]>!! FILE CLEAR !!"); File.Delete(logFolder + @"\" + logName1); } } catch (FileNotFoundException) { // ファイルなし } } using (FileStream fs = new(logFolder + logName1, FileMode.Append)) { DebugWrite("]]>", fs.Name, _LastFilename); // 書き込み using (StreamWriter sw = new(fs, System.Text.Encoding.UTF8)) { foreach (string txt in log.ToStrings()) { sw.WriteLine(txt); } } _LastFilename = fs.Name; } // タイムスタンプ変更 if (Jaffa.DateTime.DifferenceNow.Ticks != 0) { File.SetLastWriteTime(_LastFilename, Jaffa.DateTime.Now); } WriteTaskQueueCount--; }