From 1624875f72627dc05b4e8c001992158de62449f8 Mon Sep 17 00:00:00 2001 From: Bartlomiej Wolk Date: Fri, 1 May 2015 21:24:18 +0200 Subject: [PATCH 01/10] Don't save cached messages if Log in Real Time is on --- Logger.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Logger.cs b/Logger.cs index fa89d92..119bf8d 100644 --- a/Logger.cs +++ b/Logger.cs @@ -277,6 +277,11 @@ private void OnEnable() { // todo move to region void Logger_StateChanged(object sender, bool state) { + // There's no need to write cached messages since logging was made + // in real time. + if (Instance.LogInRealTime) return; + + // Save messages to file on logger stop. if (!state) LogWriter.WriteAll(FilePath, false); } From ea62f75bab4a0c87a469087ec8901903804c8ae9 Mon Sep 17 00:00:00 2001 From: Bartlomiej Wolk Date: Fri, 1 May 2015 21:35:09 +0200 Subject: [PATCH 02/10] Create WriteSingle() --- LogWriter.cs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/LogWriter.cs b/LogWriter.cs index a273394..b8f30a4 100644 --- a/LogWriter.cs +++ b/LogWriter.cs @@ -44,6 +44,7 @@ public int LoggedMessages { set { loggedMessages = value; } } + // todo add docs public static event WriteEventHandler WriteEvent; /// Save log message to cache. @@ -105,6 +106,18 @@ public void WriteLast(string filePath) { OnWriteEvent(e); } + public void WriteSingle(string message, string filePath, bool append) { + // Create stream writer used to write log cache to file. + using (writer = new StreamWriter(filePath, append)) { + writer.WriteLine(message); + } + + // Fire event. + var e = new EventArgs(); + OnWriteEvent(e); + } + + protected void OnWriteEvent(EventArgs e) { if (WriteEvent != null) { WriteEvent(this, e); From 381daba17cec0dba6d09806179e5e5c34c94f694 Mon Sep 17 00:00:00 2001 From: Bartlomiej Wolk Date: Fri, 1 May 2015 21:35:41 +0200 Subject: [PATCH 03/10] Use WriteSingle() instead of WriteLast() --- Logger.cs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/Logger.cs b/Logger.cs index 119bf8d..021c2c1 100644 --- a/Logger.cs +++ b/Logger.cs @@ -253,6 +253,7 @@ private void OnDestroy() { if (LogInRealTime) { return; } + // Write log to file when 'enableOnPlay' was selected. if (enableOnPlay) { // Write single message to the file. @@ -645,15 +646,22 @@ private static void Log( // Append caller class name. HandleAppendCallerClassName(outputMessage); + // Append message to the log file. + if (Instance.LogInRealTime) { + Instance.logWriter.WriteSingle( + outputMessage.ToString(), + Instance.filePath, + true); + + // There's no need to write cached messages since logging was made + // in real time. + return; + } + // Add log message to the cache. Instance.logWriter.AddToCache( outputMessage.ToString(), Instance.echoToConsole); - - // Append message to the log file. - if (Instance.LogInRealTime) { - Instance.logWriter.WriteLast(Instance.filePath); - } } private static bool MethodInFilter(string methodName) { From 056d651c6e178a3f4ac8e8c215fa22ccbf2f178c Mon Sep 17 00:00:00 2001 From: Bartlomiej Wolk Date: Fri, 1 May 2015 21:47:23 +0200 Subject: [PATCH 04/10] Rename argument --- Editor/InspectorControls.cs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Editor/InspectorControls.cs b/Editor/InspectorControls.cs index c75bc0c..e61621c 100644 --- a/Editor/InspectorControls.cs +++ b/Editor/InspectorControls.cs @@ -11,32 +11,31 @@ namespace FileLogger { public static class InspectorControls { public static bool DrawStartStopButton( - // todo rename to loggerState - bool oldLoggingEnabledValue, + bool loggerState, bool enableOnPlay, Action stateChangedCallback) { var btnText = GetStartStopButtonText( - oldLoggingEnabledValue, + loggerState, enableOnPlay); // Draw button. var btnState = GUILayout.Toggle( - oldLoggingEnabledValue, + loggerState, btnText, "Button"); // Execute callback. - if (btnState != oldLoggingEnabledValue) { + if (btnState != loggerState) { if (stateChangedCallback != null) { stateChangedCallback(btnState); } } // Return button state. - return btnState == oldLoggingEnabledValue - ? oldLoggingEnabledValue - : !oldLoggingEnabledValue; + return btnState == loggerState + ? loggerState + : !loggerState; } private static string GetStartStopButtonText( From f4fe0f5473bcb20d5ed7e9c2977823a21c4c6b02 Mon Sep 17 00:00:00 2001 From: Bartlomiej Wolk Date: Fri, 1 May 2015 21:50:20 +0200 Subject: [PATCH 05/10] Move methods to regions --- Logger.cs | 43 +++++++++++++++++++------------------------ 1 file changed, 19 insertions(+), 24 deletions(-) diff --git a/Logger.cs b/Logger.cs index 021c2c1..7ea2f10 100644 --- a/Logger.cs +++ b/Logger.cs @@ -25,7 +25,6 @@ namespace FileLogger { [ExecuteInEditMode] public sealed class Logger : MonoBehaviour { #region EVENTS - /// /// Delegate for StateChanged event. /// @@ -39,16 +38,6 @@ public sealed class Logger : MonoBehaviour { public static event StateChangedEventHandler StateChanged; #endregion EVENTS - - #region EVENT INVOCATORS - - private void OnStateChanged(bool state) { - var handler = StateChanged; - if (handler != null) handler(this, state); - } - - #endregion EVENT INVOCATORS - #region FIELDS private static Logger instance; @@ -275,8 +264,21 @@ private void OnEnable() { UnsubscribeFromEvents(); SubscribeToEvents(); } + private void OnDisable() { + UnsubscribeFromEvents(); + } + #endregion UNITY MESSAGES + + #region EVENT INVOCATORS + + private void OnStateChanged(bool state) { + var handler = StateChanged; + if (handler != null) handler(this, state); + } + + #endregion EVENT INVOCATORS - // todo move to region + #region EVENT HANDLERS void Logger_StateChanged(object sender, bool state) { // There's no need to write cached messages since logging was made // in real time. @@ -285,26 +287,19 @@ void Logger_StateChanged(object sender, bool state) { // Save messages to file on logger stop. if (!state) LogWriter.WriteAll(FilePath, false); } + #endregion - private void OnDisable() { - UnsubscribeFromEvents(); + #region METHODS + private void UnsubscribeFromEvents() { + UnityEngine.Debug.Log("UnsubscribeFromEvents"); + StateChanged -= Logger_StateChanged; } - // todo move to region private void SubscribeToEvents() { UnityEngine.Debug.Log("SubscribeToEvents"); StateChanged += Logger_StateChanged; } - // todo move to region - private void UnsubscribeFromEvents() { - UnityEngine.Debug.Log("UnsubscribeFromEvents"); - StateChanged -= Logger_StateChanged; - } - - #endregion UNITY MESSAGES - - #region METHODS [Conditional("DEBUG_LOGGER")] public static void LogCall() { From eab0eee0780c80e2abefc7194883b5dbb0c18bd0 Mon Sep 17 00:00:00 2001 From: Bartlomiej Wolk Date: Fri, 1 May 2015 21:55:45 +0200 Subject: [PATCH 06/10] Move writing to console window to the Log() --- LogWriter.cs | 10 ++++------ Logger.cs | 12 +++++++++++- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/LogWriter.cs b/LogWriter.cs index b8f30a4..ee47346 100644 --- a/LogWriter.cs +++ b/LogWriter.cs @@ -44,7 +44,9 @@ public int LoggedMessages { set { loggedMessages = value; } } - // todo add docs + /// + /// Event called on every write to the file. + /// public static event WriteEventHandler WriteEvent; /// Save log message to cache. @@ -57,11 +59,7 @@ public void AddToCache(string message, bool echoToConsole) { } // Cache message. logCache[logIdx] = message; - // todo this should be done in the Log() - // Handle "Echo To Console" inspector option. - if (echoToConsole) { - Debug.Log(message); - } + logIdx += 1; loggedMessages += 1; // Resize array when needed. diff --git a/Logger.cs b/Logger.cs index 7ea2f10..4a89c81 100644 --- a/Logger.cs +++ b/Logger.cs @@ -213,6 +213,11 @@ private ObjectIDGenerator ObjectIDGenerator { } } + public bool EchoToConsole { + get { return echoToConsole; } + set { echoToConsole = value; } + } + public const string VERSION = "v0.1.0"; #endregion PROPERTIES @@ -641,6 +646,11 @@ private static void Log( // Append caller class name. HandleAppendCallerClassName(outputMessage); + // todo extract methods + if (Instance.EchoToConsole) { + UnityEngine.Debug.Log(outputMessage.ToString()); + } + // Append message to the log file. if (Instance.LogInRealTime) { Instance.logWriter.WriteSingle( @@ -656,7 +666,7 @@ private static void Log( // Add log message to the cache. Instance.logWriter.AddToCache( outputMessage.ToString(), - Instance.echoToConsole); + Instance.EchoToConsole); } private static bool MethodInFilter(string methodName) { From c2fcf85b025ab6c46cb506e59a0090be5f897b86 Mon Sep 17 00:00:00 2001 From: Bartlomiej Wolk Date: Fri, 1 May 2015 21:58:26 +0200 Subject: [PATCH 07/10] Create handle methods --- Logger.cs | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/Logger.cs b/Logger.cs index 4a89c81..7696043 100644 --- a/Logger.cs +++ b/Logger.cs @@ -646,27 +646,35 @@ private static void Log( // Append caller class name. HandleAppendCallerClassName(outputMessage); - // todo extract methods - if (Instance.EchoToConsole) { - UnityEngine.Debug.Log(outputMessage.ToString()); - } + HandleEchoToConsole(outputMessage); + HandleLogInRealTime(outputMessage); + + // There's no need to write cached messages since logging was made + // in real time. + if (Instance.LogInRealTime) return; + + // Add log message to the cache. + Instance.logWriter.AddToCache( + outputMessage.ToString(), + Instance.EchoToConsole); + } - // Append message to the log file. + private static void HandleLogInRealTime(StringBuilder outputMessage) { + +// Append message to the log file. if (Instance.LogInRealTime) { Instance.logWriter.WriteSingle( outputMessage.ToString(), Instance.filePath, true); - - // There's no need to write cached messages since logging was made - // in real time. - return; } + } - // Add log message to the cache. - Instance.logWriter.AddToCache( - outputMessage.ToString(), - Instance.EchoToConsole); + private static void HandleEchoToConsole(StringBuilder outputMessage) { + + if (Instance.EchoToConsole) { + UnityEngine.Debug.Log(outputMessage.ToString()); + } } private static bool MethodInFilter(string methodName) { From 5be3e62a772aacaf7a9427c51ff2f0a3bd1d376e Mon Sep 17 00:00:00 2001 From: Bartlomiej Wolk Date: Fri, 1 May 2015 22:03:33 +0200 Subject: [PATCH 08/10] Move check if method enabled to parent methods --- Logger.cs | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/Logger.cs b/Logger.cs index 7696043..e1a36d7 100644 --- a/Logger.cs +++ b/Logger.cs @@ -317,15 +317,17 @@ public static void LogCall(object objectReference) { } private static void DoLogCall(object objectReference) { + // Return if method is disabled. + if (!FlagsHelper.IsSet( + Instance.EnabledMethods, + EnabledMethods.LogCall)) return; + // Get info from call stack. var stackInfo = new FrameInfo(3); Log( stackInfo.MethodSignature, stackInfo, - FlagsHelper.IsSet( - Instance.EnabledMethods, - EnabledMethods.LogCall), objectReference); } @@ -340,6 +342,11 @@ public static void LogResult(object result, object objectReference) { } private static void DoLogResult(object result, object objectRererence) { + // Return if method is disabled. + if (!FlagsHelper.IsSet( + Instance.EnabledMethods, + EnabledMethods.LogResult)) return; + // Compose log message. var message = string.Format("[RESULT: {0}]", result); @@ -350,9 +357,6 @@ private static void DoLogResult(object result, object objectRererence) { Log( message, stackInfo, - FlagsHelper.IsSet( - Instance.EnabledMethods, - EnabledMethods.LogResult), objectRererence); } @@ -361,6 +365,8 @@ private static void DoLogResult(object result, object objectRererence) { /// [Conditional("DEBUG_LOGGER")] public static void LogStackTrace() { + if (!Instance.enableLogStackTrace) return; + var stackTrace = new StackTrace(); var message = new StringBuilder(); for (var i = 1; i < stackTrace.FrameCount; i++) { @@ -381,7 +387,6 @@ public static void LogStackTrace() { Log( message.ToString(), stackInfo, - Instance.enableLogStackTrace, null); } @@ -407,6 +412,11 @@ public static void DoLogString( object objectReference, params object[] paramList) { + // Return if method is disabled. + if (!FlagsHelper.IsSet( + Instance.EnabledMethods, + EnabledMethods.LogString)) return; + // Compose log message. var message = string.Format(format, paramList); @@ -417,9 +427,6 @@ public static void DoLogString( Log( message, stackInfo, - FlagsHelper.IsSet( - Instance.EnabledMethods, - EnabledMethods.LogString), objectReference); } @@ -616,11 +623,8 @@ private static void HandleShowTimestamp(StringBuilder outputMessage) { private static void Log( string message, FrameInfo frameInfo, - bool methodEnabled, object objectReference) { - // todo this check should be executed inside each of the DoLog methods. - if (!methodEnabled) return; if (!Instance.LoggingEnabled) return; // Filter by class name. From 05915e1d808f2cab7009d5a86fea278dc8fe7c5d Mon Sep 17 00:00:00 2001 From: Bartlomiej Wolk Date: Sat, 2 May 2015 08:03:07 +0200 Subject: [PATCH 09/10] Draw "Always Append" toggle --- Editor/LoggerEditor.cs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Editor/LoggerEditor.cs b/Editor/LoggerEditor.cs index 7c8187a..70c7b37 100644 --- a/Editor/LoggerEditor.cs +++ b/Editor/LoggerEditor.cs @@ -27,6 +27,7 @@ public class LoggerEditor : Editor { private SerializedProperty logInRealTime; private SerializedProperty methodFilter; private SerializedProperty qualifiedClassName; + private SerializedProperty append; #endregion SERIALIZED PROPERTIES @@ -44,6 +45,7 @@ public override void OnInspectorGUI() { DrawEnableOnPlayToggle(); DrawLogInRealTimeToggle(); + DrawAppendToggle(); DrawEchoToConsoleToggle(); EditorGUILayout.Space(); @@ -92,6 +94,7 @@ private void OnEnable() { indentLine = serializedObject.FindProperty("indentLine"); classFilter = serializedObject.FindProperty("classFilter"); methodFilter = serializedObject.FindProperty("methodFilter"); + append = serializedObject.FindProperty("append"); } #endregion UNITY MESSAGES @@ -108,6 +111,20 @@ private void DrawAppendDropdown() { Script.DisplayOptions); } + private void DrawAppendToggle() { + var disabled = logInRealTime.boolValue ? true : false; + + EditorGUI.BeginDisabledGroup(disabled); + + append.boolValue = EditorGUILayout.Toggle( + new GUIContent( + "Always Append", + "Always append messages to the log file."), + append.boolValue); + + EditorGUI.EndDisabledGroup(); + } + private void DrawClearLogFileButton() { // Don't allow reseting log file while logging. if (Script.LoggingEnabled) return; From e19374332488b5b40370eacf956dc0c0436bdf5e Mon Sep 17 00:00:00 2001 From: Bartlomiej Wolk Date: Sat, 2 May 2015 08:06:27 +0200 Subject: [PATCH 10/10] Implement "Always Append" option --- Logger.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Logger.cs b/Logger.cs index e1a36d7..fcfc813 100644 --- a/Logger.cs +++ b/Logger.cs @@ -251,7 +251,7 @@ private void OnDestroy() { // Write log to file when 'enableOnPlay' was selected. if (enableOnPlay) { // Write single message to the file. - logWriter.WriteAll(filePath, append); + logWriter.WriteAll(FilePath, Append); } } @@ -290,7 +290,7 @@ void Logger_StateChanged(object sender, bool state) { if (Instance.LogInRealTime) return; // Save messages to file on logger stop. - if (!state) LogWriter.WriteAll(FilePath, false); + if (!state) LogWriter.WriteAll(FilePath, Append); } #endregion @@ -458,8 +458,8 @@ public static void StopLogging() { // Write single message to the file. Instance.logWriter.WriteAll( - Instance.filePath, - Instance.append); + Instance.FilePath, + Instance.Append); } ///