using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using Microsoft.VisualBasic; namespace CircleViewer { public class MinLogging { public string LoggerName = string.Empty; static string LogFile = @"CircleViewer.txt"; static MinLogging() { try { LogFile = Path.Combine(Constants.CircleFolder, LogFile); if (File.Exists(LogFile)) { System.IO.FileInfo fi = new System.IO.FileInfo(LogFile); if (fi.Length > 10000000) // don't let the log file get larger than 10MB { try { File.Delete(LogFile); } catch (Exception e) { Trace.WriteLine(e); } } } } catch (Exception ex) { Trace.WriteLine(ex); } } public static void LogIt(string str) { try { // only log to file if THIS is the same or higher level of detail as my desired logging level str = string.Format("{0}|{1}|{2}", DateTime.Now, Thread.CurrentThread.ManagedThreadId, str); lock (LogFile) { File.AppendAllText(LogFile, str + Environment.NewLine); if (str.Length < 512) { byte[] data = Encoding.ASCII.GetBytes(str); } else { byte[] data = Encoding.ASCII.GetBytes(string.Format($"String to long. Length: {str.Length}")); } } } catch (Exception ex) { Trace.WriteLine(ex); } } } public class LogMethod : IDisposable { private string _methodName; private Stopwatch _sw; /// /// Ctor now private - just called from the static Log method /// /// The name of the method being logged private LogMethod(string methodName) { _methodName = methodName; _sw = new Stopwatch(); _sw.Start(); string msg = string.Format(">> Entering {0}", _methodName); MinLogging.LogIt(msg); } /// /// Tidy up /// public void Dispose() { _sw.Stop(); string msg = string.Format("<< Exiting {0}: elapsed Time: {1} ms", _methodName, _sw.ElapsedMilliseconds); MinLogging.LogIt(msg); } public static IDisposable Log(string callingMethodTypeHardcode) { return new LogMethod(callingMethodTypeHardcode); } } }