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(); } } } }