From e3d37988c9c9c0410118741eed318f3eec1d9ec9 Mon Sep 17 00:00:00 2001 From: BlubbFish Date: Thu, 20 Jan 2022 19:42:14 +0100 Subject: [PATCH] [1.6.1] ProgrammLogger Fixed --- Changelog.md | 6 + Utils/ProgramLogger.cs | 303 ++++++++++++++++++++++------------------- Utils/Utils.csproj | 51 +++---- 3 files changed, 192 insertions(+), 168 deletions(-) diff --git a/Changelog.md b/Changelog.md index 0965453..dd0d95c 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,5 +1,11 @@ # Changelog +## 1.6.1 - 2022-01-20 - ProgrammLogger Fixed +### New Features +### Bugfixes +* Unhandled exception. System.IO.IOException: The file '/var/log/zwaybot/debug.log' already exists. +### Changes + ## 1.6.0 - 2022-01-09 - HttpEndpoint added ### New Features * Add HttpEndpoint diff --git a/Utils/ProgramLogger.cs b/Utils/ProgramLogger.cs index 55ce968..2866948 100644 --- a/Utils/ProgramLogger.cs +++ b/Utils/ProgramLogger.cs @@ -1,150 +1,167 @@ -using System; -using System.IO; -using System.Text; - -namespace BlubbFish.Utils { - public class ProgramLogger { - private FileWriter fw; - private ConsoleWriter stdout; - private ConsoleWriter errout; - private String loggerfile; - - public ProgramLogger() { - this.loggerfile = Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + "output.log"; - this.Init(this.loggerfile); - this.AttachToFw(); - this.SetOutputs(); - } - - private void SetOutputs() { - Console.SetOut(this.stdout); - Console.SetError(this.errout); - } - - private void Init(String file) { - if(!this.IsWritable(file)) { - Console.Error.WriteLine("Cannot write to " + file); - throw new ArgumentException("Cannot write to " + file); - } - this.fw = new FileWriter(file); - this.stdout = new ConsoleWriter(Console.Out, ConsoleWriterEventArgs.ConsoleType.Info); - this.errout = new ConsoleWriter(Console.Error, ConsoleWriterEventArgs.ConsoleType.Error); - } - - private Boolean IsWritable(String filename) { - try { +using System; +using System.IO; +using System.Text; + +namespace BlubbFish.Utils { + public class ProgramLogger { + private FileWriter fw; + private ConsoleWriter stdout; + private ConsoleWriter errout; + private String loggerfile; + + public ProgramLogger() { + this.loggerfile = Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + "output.log"; + this.Init(this.loggerfile); + this.AttachToFw(); + this.SetOutputs(); + } + + private void SetOutputs() { + Console.SetOut(this.stdout); + Console.SetError(this.errout); + } + + private void Init(String file) { + if(!this.IsWritable(file)) { + Console.Error.WriteLine("Cannot write to " + file); + throw new ArgumentException("Cannot write to " + file); + } + this.fw = new FileWriter(file, false); + this.stdout = new ConsoleWriter(Console.Out, ConsoleWriterEventArgs.ConsoleType.Info); + this.errout = new ConsoleWriter(Console.Error, ConsoleWriterEventArgs.ConsoleType.Error); + } + + private Boolean IsWritable(String filename) { + try { using FileStream fstream = new FileStream(filename, FileMode.Append); using TextWriter writer = new StreamWriter(fstream); - writer.Write(""); - } catch (UnauthorizedAccessException) { - return false; - } - return true; - } - - public void SetPath(String file) { - if(file == null) { - return; - } - if (!this.IsWritable(file)) { - Console.Error.WriteLine("Cannot write to " + file); - throw new ArgumentException("Cannot write to " + file); - } - this.DisattachToFw(); - this.fw.Close(); - if(new FileInfo(this.loggerfile).Length > 0) { - File.Move(this.loggerfile, file); - } else { - File.Delete(this.loggerfile); - } - this.loggerfile = file; - this.fw = new FileWriter(this.loggerfile); - this.AttachToFw(); - } - - private void DisattachToFw() { - this.stdout.WriteEvent -= this.fw.Write; - this.stdout.WriteLineEvent -= this.fw.WriteLine; - this.errout.WriteEvent -= this.fw.Write; - this.errout.WriteLineEvent -= this.fw.WriteLine; - } - private void AttachToFw() { - this.stdout.WriteEvent += this.fw.Write; - this.stdout.WriteLineEvent += this.fw.WriteLine; - this.errout.WriteEvent += this.fw.Write; - this.errout.WriteLineEvent += this.fw.WriteLine; - } - } - - internal class FileWriter : StreamWriter { - private Boolean newline = true; - public FileWriter(String path) : base(path) { - } - + writer.Write(""); + } catch (UnauthorizedAccessException) { + return false; + } + return true; + } + + public void SetPath(String file) { + if(file == null) { + return; + } + if (!this.IsWritable(file)) { + Console.Error.WriteLine("Cannot write to " + file); + throw new ArgumentException("Cannot write to " + file); + } + this.DisattachToFw(); + this.fw.Close(); + if(new FileInfo(this.loggerfile).Length > 0) { + if(File.Exists(file)) { + this.FileCopy(this.loggerfile, file); + File.Delete(this.loggerfile); + } else { + File.Move(this.loggerfile, file); + } + } else { + File.Delete(this.loggerfile); + } + this.loggerfile = file; + this.fw = new FileWriter(this.loggerfile, true); + this.AttachToFw(); + } + + private void FileCopy(String source, String target) { + using FileStream fread = new FileStream(source, FileMode.Open); + using FileStream fwrite = new FileStream(target, FileMode.Create); + using TextReader reader = new StreamReader(fread); + using TextWriter writer = new StreamWriter(fwrite); + + writer.Write(reader.ReadToEnd()); + writer.Flush(); + writer.Close(); + reader.Close(); + } + + private void DisattachToFw() { + this.stdout.WriteEvent -= this.fw.Write; + this.stdout.WriteLineEvent -= this.fw.WriteLine; + this.errout.WriteEvent -= this.fw.Write; + this.errout.WriteLineEvent -= this.fw.WriteLine; + } + private void AttachToFw() { + this.stdout.WriteEvent += this.fw.Write; + this.stdout.WriteLineEvent += this.fw.WriteLine; + this.errout.WriteEvent += this.fw.Write; + this.errout.WriteLineEvent += this.fw.WriteLine; + } + } + + internal class FileWriter : StreamWriter { + private Boolean newline = true; + public FileWriter(String path, Boolean append) : base(path, append) { + } + public override Encoding Encoding => Encoding.UTF8; - public override Boolean AutoFlush { get => true; set => base.AutoFlush = value; } - - private void Write(String value, TextWriter origstream, ConsoleWriterEventArgs.ConsoleType type) { + public override Boolean AutoFlush { get => true; set => base.AutoFlush = value; } + + private void Write(String value, TextWriter origstream, ConsoleWriterEventArgs.ConsoleType type) { String text; - if (this.newline) { - text = "[" + DateTime.Now.ToString("o") + "]-" + type.ToString() + ": " + value; - this.newline = false; - } else { - text = value; - } - origstream.Write(text); - base.Write(text); - base.Flush(); - } - - private void WriteLine(String value, TextWriter origstream, ConsoleWriterEventArgs.ConsoleType type) { + if (this.newline) { + text = "[" + DateTime.Now.ToString("o") + "]-" + type.ToString() + ": " + value; + this.newline = false; + } else { + text = value; + } + origstream.Write(text); + base.Write(text); + base.Flush(); + } + + private void WriteLine(String value, TextWriter origstream, ConsoleWriterEventArgs.ConsoleType type) { String text = this.newline ? "[" + DateTime.Now.ToString("o") + "]-" + type.ToString() + ": " + value : value; - this.newline = true; - origstream.WriteLine(text); - base.WriteLine(text); - base.Flush(); - } - - internal void Write(Object sender, ConsoleWriterEventArgs e) => this.Write(e.Value, e.Writer, e.StreamType); - - internal void WriteLine(Object sender, ConsoleWriterEventArgs e) => this.WriteLine(e.Value, e.Writer, e.StreamType); - } - - internal class ConsoleWriterEventArgs : EventArgs { - public String Value { get; private set; } - public TextWriter Writer { get; private set; } - public ConsoleType StreamType { get; private set; } - - public enum ConsoleType { - Info, - Error - } - - public ConsoleWriterEventArgs(String value, TextWriter writer, ConsoleType type) { - this.Value = value; - this.Writer = writer; - this.StreamType = type; - } - } - - internal class ConsoleWriter : TextWriter { - private readonly TextWriter stream; - private readonly ConsoleWriterEventArgs.ConsoleType streamtype; - - public ConsoleWriter(TextWriter writer, ConsoleWriterEventArgs.ConsoleType type) { - this.stream = writer; - this.streamtype = type; - } - + this.newline = true; + origstream.WriteLine(text); + base.WriteLine(text); + base.Flush(); + } + + internal void Write(Object sender, ConsoleWriterEventArgs e) => this.Write(e.Value, e.Writer, e.StreamType); + + internal void WriteLine(Object sender, ConsoleWriterEventArgs e) => this.WriteLine(e.Value, e.Writer, e.StreamType); + } + + internal class ConsoleWriterEventArgs : EventArgs { + public String Value { get; private set; } + public TextWriter Writer { get; private set; } + public ConsoleType StreamType { get; private set; } + + public enum ConsoleType { + Info, + Error + } + + public ConsoleWriterEventArgs(String value, TextWriter writer, ConsoleType type) { + this.Value = value; + this.Writer = writer; + this.StreamType = type; + } + } + + internal class ConsoleWriter : TextWriter { + private readonly TextWriter stream; + private readonly ConsoleWriterEventArgs.ConsoleType streamtype; + + public ConsoleWriter(TextWriter writer, ConsoleWriterEventArgs.ConsoleType type) { + this.stream = writer; + this.streamtype = type; + } + public override Encoding Encoding => Encoding.UTF8; - public override void Write(String value) => this.WriteEvent?.Invoke(this, new ConsoleWriterEventArgs(value, this.stream, this.streamtype)); - //base.Write(value); - - public override void WriteLine(String value) => this.WriteLineEvent?.Invoke(this, new ConsoleWriterEventArgs(value, this.stream, this.streamtype)); - //base.WriteLine(value); - - public event EventHandler WriteEvent; - public event EventHandler WriteLineEvent; - } -} + public override void Write(String value) => this.WriteEvent?.Invoke(this, new ConsoleWriterEventArgs(value, this.stream, this.streamtype)); + //base.Write(value); + + public override void WriteLine(String value) => this.WriteLineEvent?.Invoke(this, new ConsoleWriterEventArgs(value, this.stream, this.streamtype)); + //base.WriteLine(value); + + public event EventHandler WriteEvent; + public event EventHandler WriteLineEvent; + } +} diff --git a/Utils/Utils.csproj b/Utils/Utils.csproj index 492396d..9da3f45 100644 --- a/Utils/Utils.csproj +++ b/Utils/Utils.csproj @@ -8,37 +8,38 @@ BlubbFish BlubbFish Utils.BlubbFish - Copyright © BlubbFish 2014 - 09.01.2022 - 1.6.0 + Copyright © BlubbFish 2014 - 20.01.2022 + 1.6.1 de-DE LICENSE http://git.blubbfish.net/vs_utils/Utils http://git.blubbfish.net/vs_utils/Utils.git git - 1.6.0 HttpEndpoint added - 1.5.0 Add GetEvent so you can call events by string; Add OwnSingeton class - 1.4.0 Add Helper to Utils - 1.1.3 Improve CmdArgs - 1.1.2 Tiny Codingstyles - 1.1.1 ProgrammLogger neets to cleanup - 1.1.0 ProgrammLogger - 1.0.7.0 Yet another IniReader improvemnt round again - 1.0.6.0 Yet another IniReader improvemnt round - 1.0.5.2 And Improve IniReader again - 1.0.5.1 Improve IniReader again - 1.0.5.0 Improve IniReader - 1.0.4.1 Cleanup OwnView - 1.0.4.0 More Updater - 1.0.3.2 Next Updater - 1.0.3.1 EventArgsHelper - 1.0.2.6 Better Updater - 1.0.2.5 Logging in OwnObject - 1.0.2.3 OwnModel better - 1.0.2.2 Make it nice - 1.0.2.1 Filemutex - 1.0.0.1 Filelogger improvements - 1.0.0.0 Init + 1.6.1 - 2022-01-20 - ProgrammLogger Fixed + 1.6.0 - 2022-01-09 - HttpEndpoint added + 1.5.0 - 2021-04-10 - Add GetEvent so you can call events by string; Add OwnSingeton class + 1.4.0 - 2018-11-27 - Add Helper to Utils + 1.1.3 - 2018-10-02 - Improve CmdArgs + 1.1.2 - 2018-09-11 - Tiny Codingstyles + 1.1.1 - 2018-05-29 - ProgrammLogger neets to cleanup + 1.1.0 - 2018-05-15 - ProgrammLogger + 1.0.7.0 - 2018-05-08 - Yet another IniReader improvemnt round again + 1.0.6.0 - 2017-12-22 - Yet another IniReader improvemnt round + 1.0.5.2 - 2017-09-26 - And Improve IniReader again + 1.0.5.1 - 2017-09-24 - Improve IniReader again + 1.0.5.0 - 2017-08-09 - Improve IniReader + 1.0.4.1 - 2017-08-08 - Cleanup OwnView + 1.0.4.0 - 2017-04-30 - More Updater + 1.0.3.2 - 2017-04-26 - Next Updater + 1.0.3.1 - 2017-04-25 - EventArgsHelper + 1.0.2.6 - 2017-04-24 - Better Updater + 1.0.2.5 - 2017-04-19 - Logging in OwnObject + 1.0.2.3 - 2017-04-16 - OwnModel better + 1.0.2.2 - 2017-03-09 - Make it nice + 1.0.2.1 - 2017-03-09 - Filemutex + 1.0.0.1 - 2016-12-03 - Filelogger improvements + 1.0.0.0 - 2015-11-16 - Init