diff options
author | Jesse Plamondon-Willard <Pathoschild@users.noreply.github.com> | 2020-03-22 19:52:42 -0400 |
---|---|---|
committer | Jesse Plamondon-Willard <Pathoschild@users.noreply.github.com> | 2020-03-22 19:52:42 -0400 |
commit | 7ca5efbbc576f3c6c43493654b2a0ac040fd4f31 (patch) | |
tree | fae7a4e06a14ff7f8d709e2f4d5b8b92b8784a37 /src/SMAPI/Framework/Monitor.cs | |
parent | 5ae640dc91adff8dfb0827e2a3c3f6b54be7c612 (diff) | |
parent | 6d1494a56c5d04e7bc1ee406810a5a53dea2229a (diff) | |
download | SMAPI-7ca5efbbc576f3c6c43493654b2a0ac040fd4f31.tar.gz SMAPI-7ca5efbbc576f3c6c43493654b2a0ac040fd4f31.tar.bz2 SMAPI-7ca5efbbc576f3c6c43493654b2a0ac040fd4f31.zip |
Merge branch 'develop' into stable
Diffstat (limited to 'src/SMAPI/Framework/Monitor.cs')
-rw-r--r-- | src/SMAPI/Framework/Monitor.cs | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/SMAPI/Framework/Monitor.cs b/src/SMAPI/Framework/Monitor.cs index 06cf1b46..f630c7fe 100644 --- a/src/SMAPI/Framework/Monitor.cs +++ b/src/SMAPI/Framework/Monitor.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; using StardewModdingAPI.Framework.Logging; using StardewModdingAPI.Internal.ConsoleWriting; @@ -26,6 +27,9 @@ namespace StardewModdingAPI.Framework /// <summary>The maximum length of the <see cref="LogLevel"/> values.</summary> private static readonly int MaxLevelLength = (from level in Enum.GetValues(typeof(LogLevel)).Cast<LogLevel>() select level.ToString().Length).Max(); + /// <summary>A cache of messages that should only be logged once.</summary> + private readonly HashSet<string> LogOnceCache = new HashSet<string>(); + /********* ** Accessors @@ -74,6 +78,15 @@ namespace StardewModdingAPI.Framework this.LogImpl(this.Source, message, (ConsoleLogLevel)level); } + /// <summary>Log a message for the player or developer, but only if it hasn't already been logged since the last game launch.</summary> + /// <param name="message">The message to log.</param> + /// <param name="level">The log severity level.</param> + public void LogOnce(string message, LogLevel level = LogLevel.Trace) + { + if (this.LogOnceCache.Add($"{message}|{level}")) + this.LogImpl(this.Source, message, (ConsoleLogLevel)level); + } + /// <summary>Log a message that only appears when <see cref="IMonitor.IsVerbose"/> is enabled.</summary> /// <param name="message">The message to log.</param> public void VerboseLog(string message) |