From 46bb08f60b808f7037489e0ffbcf701935f4910b Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 4 Nov 2021 18:06:55 +0100 Subject: [PATCH] rethrow file and directory think exceptions with proper information --- ExtremelySimpleLogger/DirectorySink.cs | 40 ++++++++++++++++++-------- ExtremelySimpleLogger/FileSink.cs | 31 +++++++++++++++----- 2 files changed, 52 insertions(+), 19 deletions(-) diff --git a/ExtremelySimpleLogger/DirectorySink.cs b/ExtremelySimpleLogger/DirectorySink.cs index 386c43f..dd9ab9b 100644 --- a/ExtremelySimpleLogger/DirectorySink.cs +++ b/ExtremelySimpleLogger/DirectorySink.cs @@ -36,24 +36,32 @@ namespace ExtremelySimpleLogger { public DirectorySink(DirectoryInfo directory, int maxFiles = 10, bool reopenOnWrite = false, string dateFormat = DefaultDateFormat) { this.reopenOnWrite = reopenOnWrite; - if (!directory.Exists) - directory.Create(); + try { + if (!directory.Exists) + directory.Create(); + } catch (Exception e) { + throw new IOException($"Failed to create directory sink directory {directory}", e); + } - // delete old files - var files = directory.GetFiles(); - if (files.Length >= maxFiles) { - // order files by their creation time so that older files are deleted first - var ordered = files.OrderBy(f => f.CreationTime).ToList(); - while (ordered.Count >= maxFiles) { - ordered[0].Delete(); - ordered.RemoveAt(0); + try { + // delete old files + var files = directory.GetFiles(); + if (files.Length >= maxFiles) { + // order files by their creation time so that older files are deleted first + var ordered = files.OrderBy(f => f.CreationTime).ToList(); + while (ordered.Count >= maxFiles) { + ordered[0].Delete(); + ordered.RemoveAt(0); + } } + } catch (Exception e) { + throw new IOException($"Failed to delete old files in directory sink {directory}", e); } var date = DateTime.Now.ToString(dateFormat); this.file = new FileInfo(Path.Combine(directory.FullName, $"{date}.txt")); if (!reopenOnWrite) { - this.writer = this.file.AppendText(); + this.writer = this.Append(); this.writer.AutoFlush = true; } } @@ -67,7 +75,7 @@ namespace ExtremelySimpleLogger { protected override void Log(Logger logger, LogLevel level, string s) { lock (this.file) { if (this.reopenOnWrite) { - using (var w = this.file.AppendText()) + using (var w = this.Append()) w.WriteLine(s); } else { this.writer.WriteLine(s); @@ -86,5 +94,13 @@ namespace ExtremelySimpleLogger { } } + private StreamWriter Append() { + try { + return this.file.AppendText(); + } catch (Exception e) { + throw new IOException($"Failed to append to directory sink file {this.file}", e); + } + } + } } \ No newline at end of file diff --git a/ExtremelySimpleLogger/FileSink.cs b/ExtremelySimpleLogger/FileSink.cs index f96dc62..7e21189 100644 --- a/ExtremelySimpleLogger/FileSink.cs +++ b/ExtremelySimpleLogger/FileSink.cs @@ -1,3 +1,4 @@ +using System; using System.IO; namespace ExtremelySimpleLogger { @@ -33,15 +34,23 @@ namespace ExtremelySimpleLogger { this.reopenOnWrite = reopenOnWrite; this.file = file; - var dir = file.Directory; - if (dir != null && !dir.Exists) - dir.Create(); + try { + var dir = file.Directory; + if (dir != null && !dir.Exists) + dir.Create(); + } catch (Exception e) { + throw new IOException($"Failed to create directory for file sink {file}", e); + } - if (file.Exists && (!append || file.Length >= fileSizeLimit)) - file.Delete(); + try { + if (file.Exists && (!append || file.Length >= fileSizeLimit)) + file.Delete(); + } catch (Exception e) { + throw new IOException($"Failed to delete file sink file {file}", e); + } if (!reopenOnWrite) { - this.writer = file.AppendText(); + this.writer = this.Append(); this.writer.AutoFlush = true; } } @@ -55,7 +64,7 @@ namespace ExtremelySimpleLogger { protected override void Log(Logger logger, LogLevel level, string s) { lock (this.file) { if (this.reopenOnWrite) { - using (var w = this.file.AppendText()) + using (var w = this.Append()) w.WriteLine(s); } else { this.writer.WriteLine(s); @@ -74,5 +83,13 @@ namespace ExtremelySimpleLogger { } } + private StreamWriter Append() { + try { + return this.file.AppendText(); + } catch (Exception e) { + throw new IOException($"Failed to append to file sink {this.file}", e); + } + } + } } \ No newline at end of file