using System; using System.IO; namespace SabreTools.Helper { /// /// Log either to file or to the console /// public class Logger { // Private instance variables private bool _tofile; private string _filename; private StreamWriter _log; // Public wrappers public bool ToFile { get { return _tofile; } set { if (!value) { Close(); } _tofile = value; if (_tofile) { Start(); } } } /// /// Initialize a Logger object with the given information /// /// True if file should be written to instead of console /// Optional filename representing log location public Logger(bool tofile, string filename = "") { _tofile = tofile; _filename = filename; } /// /// Start logging by opening output file (if necessary) /// /// True if the logging was started correctly, false otherwise public bool Start() { if (!_tofile) { return true; } try { _log = new StreamWriter(File.Open(_filename, FileMode.OpenOrCreate | FileMode.Append)); _log.WriteLine("Logging started " + DateTime.Now); } catch { return false; } return true; } /// /// End logging by closing output file (if necessary) /// /// True if the logging was ended correctly, false otherwise public bool Close() { if (!_tofile) { return true; } try { _log.WriteLine("Logging ended " + DateTime.Now); _log.Close(); } catch { return false; } return true; } /// /// Write the given string to the log output /// /// String to be written log /// True if the output could be written, false otherwise public bool Log(string output) { // Everything writes to console Console.WriteLine(output); // If we're writing to file, use the existing stream if (_tofile) { try { _log.WriteLine(output); } catch { Console.WriteLine("Could not write to log file!"); return false; } } return true; } } }