From 5fd708e43f6576cc71b80406de602adbdef98f56 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Fri, 4 Nov 2016 19:52:12 -0400 Subject: format & document logging code --- src/StardewModdingAPI/Log.cs | 159 +++++++++++++++++++++++++------------------ 1 file changed, 94 insertions(+), 65 deletions(-) (limited to 'src/StardewModdingAPI/Log.cs') diff --git a/src/StardewModdingAPI/Log.cs b/src/StardewModdingAPI/Log.cs index abf6e36a..ddd82579 100644 --- a/src/StardewModdingAPI/Log.cs +++ b/src/StardewModdingAPI/Log.cs @@ -5,198 +5,227 @@ using System.Threading.Tasks; namespace StardewModdingAPI { + /// A singleton which logs messages to the SMAPI console and log file. public static class Log { + /********* + ** Properties + *********/ /// A pseudorandom number generator used to generate log files. private static readonly Random Random = new Random(); - private static readonly LogWriter _writer; + /// The underlying log writer. + private static readonly LogWriter Writer = LogWriter.Instance; - static Log() - { - _writer = LogWriter.Instance; - } - private static void PrintLog(LogInfo li) - { - _writer.WriteToLog(li); - } - - #region Exception Logging - - /// - /// Catch unhandled exception from the application - /// - /// Should be moved out of here if we do more than just log the exception. + /********* + ** Public methods + *********/ + /**** + ** Exceptions + ****/ + /// Log an exception event. + /// The event sender. + /// The event arguments. public static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { Console.WriteLine("An exception has been caught"); File.WriteAllText(Path.Combine(Constants.LogDir, $"MODDED_ErrorLog.Log_{DateTime.UtcNow.Ticks}.txt"), e.ExceptionObject.ToString()); } - /// - /// Catch thread exception from the application - /// - /// Should be moved out of here if we do more than just log the exception. + /// Log a thread exception event. + /// The event sender. + /// The event arguments. public static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) { Console.WriteLine("A thread exception has been caught"); File.WriteAllText(Path.Combine(Constants.LogDir, $"MODDED_ErrorLog.Log_{Log.Random.Next(100000000, 999999999)}.txt"), e.Exception.ToString()); } - #endregion - - #region Sync Logging - /// - /// NOTICE: Sync logging is discouraged. Please use Async instead. - /// - /// Message to log - /// Colour of message - public static void SyncColour(object message, ConsoleColor colour) + /**** + ** Synchronous logging + ****/ + /// Synchronously log a message to the console. NOTE: synchronous logging is discouraged; use asynchronous methods instead. + /// The message to log. + /// The message color. + public static void SyncColour(object message, ConsoleColor color) { - PrintLog(new LogInfo(message?.ToString(), colour)); + Log.PrintLog(new LogInfo(message?.ToString(), color)); } - #endregion - - #region Async Logging - - public static void AsyncColour(object message, ConsoleColor colour) + /**** + ** Asynchronous logging + ****/ + /// Asynchronously log a message to the console with the specified color. + /// The message to log. + /// The message color. + public static void AsyncColour(object message, ConsoleColor color) { - Task.Run(() => { PrintLog(new LogInfo(message?.ToString(), colour)); }); + Task.Run(() => { Log.PrintLog(new LogInfo(message?.ToString(), color)); }); } + /// Asynchronously log a message to the console. + /// The message to log. public static void Async(object message) { - AsyncColour(message?.ToString(), ConsoleColor.Gray); + Log.AsyncColour(message?.ToString(), ConsoleColor.Gray); } + /// Asynchronously log a red message to the console. + /// The message to log. public static void AsyncR(object message) { - AsyncColour(message?.ToString(), ConsoleColor.Red); + Log.AsyncColour(message?.ToString(), ConsoleColor.Red); } + /// Asynchronously log an orange message to the console. + /// The message to log. public static void AsyncO(object message) { - AsyncColour(message.ToString(), ConsoleColor.DarkYellow); + Log.AsyncColour(message.ToString(), ConsoleColor.DarkYellow); } + /// Asynchronously log a yellow message to the console. + /// The message to log. public static void AsyncY(object message) { - AsyncColour(message?.ToString(), ConsoleColor.Yellow); + Log.AsyncColour(message?.ToString(), ConsoleColor.Yellow); } + /// Asynchronously log a green message to the console. + /// The message to log. public static void AsyncG(object message) { - AsyncColour(message?.ToString(), ConsoleColor.Green); + Log.AsyncColour(message?.ToString(), ConsoleColor.Green); } + /// Asynchronously log a cyan message to the console. + /// The message to log. public static void AsyncC(object message) { - AsyncColour(message?.ToString(), ConsoleColor.Cyan); + Log.AsyncColour(message?.ToString(), ConsoleColor.Cyan); } + /// Asynchronously log a magenta message to the console. + /// The message to log. public static void AsyncM(object message) { - AsyncColour(message?.ToString(), ConsoleColor.Magenta); + Log.AsyncColour(message?.ToString(), ConsoleColor.Magenta); } + /// Asynchronously log an error to the console. + /// The message to log. public static void Error(object message) { - AsyncR("[ERROR] " + message); + Log.AsyncR("[ERROR] " + message); } + /// Asynchronously log a success message to the console. + /// The message to log. public static void Success(object message) { - AsyncG("[SUCCESS] " + message); + Log.AsyncG("[SUCCESS] " + message); } + /// Asynchronously log an info message to the console. + /// The message to log. public static void Info(object message) { - AsyncY("[INFO] " + message); + Log.AsyncY("[INFO] " + message); } + // unused? public static void Out(object message) { - Async("[OUT] " + message); + Log.Async("[OUT] " + message); } + /// Asynchronously log a debug message to the console. + /// The message to log. public static void Debug(object message) { - AsyncO("[DEBUG] " + message); + Log.AsyncO("[DEBUG] " + message); } - #endregion - - #region ToRemove - + /**** + ** Obsolete + ****/ public static void LogValueNotSpecified() { - AsyncR(" must be specified"); + Log.AsyncR(" must be specified"); } public static void LogObjectValueNotSpecified() { - AsyncR(" and must be specified"); + Log.AsyncR(" and must be specified"); } public static void LogValueInvalid() { - AsyncR(" is invalid"); + Log.AsyncR(" is invalid"); } public static void LogObjectInvalid() { - AsyncR(" is invalid"); + Log.AsyncR(" is invalid"); } public static void LogValueNotInt32() { - AsyncR(" must be a whole number (Int32)"); + Log.AsyncR(" must be a whole number (Int32)"); } [Obsolete("Parameter 'values' is no longer supported. Format before logging.")] private static void PrintLog(object message, bool disableLogging, params object[] values) { - PrintLog(new LogInfo(message?.ToString())); + Log.PrintLog(new LogInfo(message?.ToString())); } [Obsolete("Parameter 'values' is no longer supported. Format before logging.")] public static void Success(object message, params object[] values) { - Success(message); + Log.Success(message); } [Obsolete("Parameter 'values' is no longer supported. Format before logging.")] public static void Verbose(object message, params object[] values) { - Out(message); + Log.Out(message); } [Obsolete("Parameter 'values' is no longer supported. Format before logging.")] public static void Comment(object message, params object[] values) { - AsyncC(message); + Log.AsyncC(message); } [Obsolete("Parameter 'values' is no longer supported. Format before logging.")] public static void Info(object message, params object[] values) { - Info(message); + Log.Info(message); } [Obsolete("Parameter 'values' is no longer supported. Format before logging.")] public static void Error(object message, params object[] values) { - Error(message); + Log.Error(message); } [Obsolete("Parameter 'values' is no longer supported. Format before logging.")] public static void Debug(object message, params object[] values) { - Debug(message); + Log.Debug(message); } - #endregion + + /********* + ** Private methods + *********/ + /// Write a message to the log. + /// The message to write. + private static void PrintLog(LogInfo message) + { + Log.Writer.WriteToLog(message); + } } } \ No newline at end of file -- cgit