From d39abe603daa03dd4874dca12d6ad8fe1cbc1c86 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 30 Nov 2023 22:46:16 +0100 Subject: [PATCH] added LogWriter class --- ExtremelySimpleLogger/LogWriter.cs | 82 ++++++++++++++++++++++++++++++ Sample/Program.cs | 8 ++- 2 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 ExtremelySimpleLogger/LogWriter.cs diff --git a/ExtremelySimpleLogger/LogWriter.cs b/ExtremelySimpleLogger/LogWriter.cs new file mode 100644 index 0000000..6f92ea1 --- /dev/null +++ b/ExtremelySimpleLogger/LogWriter.cs @@ -0,0 +1,82 @@ +using System; +using System.IO; +using System.Text; +using System.Threading.Tasks; + +namespace ExtremelySimpleLogger { + /// + /// Implementation of a that writes to a . + /// + public class LogWriter : TextWriter { + + /// + /// The log level that this log writer should write with. + /// + public LogLevel Level { + get { + lock (this.logger) + return this.level; + } + set { + lock (this.logger) + this.level = value; + } + } + + /// + public override Encoding Encoding => Encoding.UTF8; + + private readonly StringBuilder line = new StringBuilder(); + private readonly Logger logger; + + private LogLevel level; + + /// + /// Creates a new log writer with the given settings. + /// + /// The logger to write to. + /// The log level to write with. + public LogWriter(Logger logger, LogLevel level = LogLevel.Info) { + this.logger = logger; + this.level = level; + } + + /// + public override void Write(char value) { + lock (this.logger) + this.line.Append(value); + } + + /// + public override void Write(char[] buffer, int index, int count) { + lock (this.logger) + this.line.Append(buffer, index, count); + } + + /// + public override void Write(string value) { + lock (this.logger) + this.line.Append(value); + } + + /// + public override void WriteLine(string value) { + this.Write(value); + this.WriteLine(); + } + + /// + public override void WriteLine() { + this.Flush(); + } + + /// + public override void Flush() { + lock (this.logger) { + this.logger.Log(this.level, this.line); + this.line.Clear(); + } + } + + } +} diff --git a/Sample/Program.cs b/Sample/Program.cs index e521c86..2620791 100644 --- a/Sample/Program.cs +++ b/Sample/Program.cs @@ -39,9 +39,15 @@ namespace Sample { logger.Log(LogLevel.Trace, "This is a message that only the file sink will receive, since its minimum level is lower."); logger.Log(LogLevel.Info, "The program finished."); + // we can also use a writer to write to the log + Console.SetError(new LogWriter(logger, LogLevel.Warn)); + Console.Error.WriteLine("This is an error written through serr! Oh no!"); + Console.Error.Write("This is another error, but "); + Console.Error.WriteLine("written in multiple parts!"); + // Once we're done using the logger, we can dispose it so that our FileSink instances free their files logger.Dispose(); } } -} \ No newline at end of file +}