summaryrefslogtreecommitdiff
path: root/src/SMAPI/Framework/Logging/LogManager.cs
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2022-01-15 12:21:22 -0500
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2022-01-15 12:21:22 -0500
commita8985e122e9ebd3cb1545971474b95d34058f896 (patch)
tree18cd20a7dacc8023a689f5118a6e42a486c3ca3a /src/SMAPI/Framework/Logging/LogManager.cs
parente30e42762871af3900c47886b57e8c43287b290a (diff)
downloadSMAPI-a8985e122e9ebd3cb1545971474b95d34058f896.tar.gz
SMAPI-a8985e122e9ebd3cb1545971474b95d34058f896.tar.bz2
SMAPI-a8985e122e9ebd3cb1545971474b95d34058f896.zip
fix suppressed console output not suppressing newlines
Diffstat (limited to 'src/SMAPI/Framework/Logging/LogManager.cs')
-rw-r--r--src/SMAPI/Framework/Logging/LogManager.cs20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/SMAPI/Framework/Logging/LogManager.cs b/src/SMAPI/Framework/Logging/LogManager.cs
index 90433c37..acd2c617 100644
--- a/src/SMAPI/Framework/Logging/LogManager.cs
+++ b/src/SMAPI/Framework/Logging/LogManager.cs
@@ -22,9 +22,15 @@ namespace StardewModdingAPI.Framework.Logging
/*********
** Fields
*********/
+ /// <summary>Whether to show trace messages in the console.</summary>
+ private readonly bool ShowTraceInConsole;
+
/// <summary>The log file to which to write messages.</summary>
private readonly LogFileManager LogFile;
+ /// <summary>The text writer which intercepts console output.</summary>
+ private readonly InterceptingTextWriter ConsoleInterceptor;
+
/// <summary>Prefixing a low-level message with this character indicates that the console interceptor should write the string without intercepting it. (The character itself is not written.)</summary>
private readonly char IgnoreChar = '\u200B';
@@ -91,10 +97,11 @@ namespace StardewModdingAPI.Framework.Logging
public LogManager(string logPath, ColorSchemeConfig colorConfig, bool writeToConsole, bool isVerbose, bool isDeveloperMode, Func<int?> getScreenIdForLog)
{
// init construction logic
+ this.ShowTraceInConsole = isDeveloperMode;
this.GetMonitorImpl = name => new Monitor(name, this.IgnoreChar, this.LogFile, colorConfig, isVerbose, getScreenIdForLog)
{
WriteToConsole = writeToConsole,
- ShowTraceInConsole = isDeveloperMode,
+ ShowTraceInConsole = this.ShowTraceInConsole,
ShowFullStampInConsole = isDeveloperMode
};
@@ -104,10 +111,10 @@ namespace StardewModdingAPI.Framework.Logging
this.MonitorForGame = this.GetMonitor("game");
// redirect direct console output
- var output = new InterceptingTextWriter(Console.Out, this.IgnoreChar);
+ this.ConsoleInterceptor = new InterceptingTextWriter(Console.Out, this.IgnoreChar);
if (writeToConsole)
- output.OnMessageIntercepted += message => this.HandleConsoleMessage(this.MonitorForGame, message);
- Console.SetOut(output);
+ this.ConsoleInterceptor.OnMessageIntercepted += message => this.HandleConsoleMessage(this.MonitorForGame, message);
+ Console.SetOut(this.ConsoleInterceptor);
// enable Unicode handling on Windows
// (the terminal defaults to UTF-8 on Linux/macOS)
@@ -363,7 +370,10 @@ namespace StardewModdingAPI.Framework.Logging
// ignore suppressed message
if (level != LogLevel.Error && this.SuppressConsolePatterns.Any(p => p.IsMatch(message)))
+ {
+ this.ConsoleInterceptor.IgnoreNextIfNewline = true;
return;
+ }
// show friendly error if applicable
foreach (ReplaceLogPattern entry in this.ReplaceConsolePatterns)
@@ -383,6 +393,8 @@ namespace StardewModdingAPI.Framework.Logging
// forward to monitor
gameMonitor.Log(message, level);
+ if (level == LogLevel.Trace && !this.ShowTraceInConsole)
+ this.ConsoleInterceptor.IgnoreNextIfNewline = true;
}
/// <summary>Write a summary of mod warnings to the console and log.</summary>