Skip to content

Commit

Permalink
v-23. Loggable abstract class lets you make any class a loggable clas…
Browse files Browse the repository at this point in the history
…s! Defaulting to true for IsCurrent so that mods that don't implement version checking don't always is they have a new version. Added non-string versions of Logging methods.
  • Loading branch information
iamwyza committed Dec 2, 2017
1 parent 3b7e7f8 commit 340d7d7
Show file tree
Hide file tree
Showing 8 changed files with 229 additions and 86 deletions.
2 changes: 2 additions & 0 deletions Assembly-CSharp/Assembly-CSharp.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,10 @@
<Compile Include="GlobalSuppressions.cs" />
<Compile Include="Handlers.cs" />
<Compile Include="HookInfoAttribute.cs" />
<Compile Include="ILogger.cs" />
<Compile Include="IMod.cs" />
<Compile Include="IModSettings.cs" />
<Compile Include="Loggable.cs" />
<Compile Include="Logger.cs" />
<Compile Include="LogLevel.cs" />
<Compile Include="Mod.cs" />
Expand Down
68 changes: 68 additions & 0 deletions Assembly-CSharp/ILogger.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
namespace Modding
{
/// <summary>
/// Logging Utility
/// </summary>
public interface ILogger
{
/// <summary>
/// Log at the info level. Includes the Mod's name in the output.
/// </summary>
/// <param name="message">Message to log</param>
void Log(string message);

/// <summary>
/// Log at the info level. Includes the Mod's name in the output.
/// </summary>
/// <param name="message">Message to log</param>
void Log(object message);

/// <summary>
/// Log at the debug level. Includes the Mod's name in the output.
/// </summary>
/// <param name="message">Message to log</param>
void LogDebug(string message);

/// <summary>
/// Log at the debug level. Includes the Mod's name in the output.
/// </summary>
/// <param name="message">Message to log</param>
void LogDebug(object message);

/// <summary>
/// Log at the error level. Includes the Mod's name in the output.
/// </summary>
/// <param name="message">Message to log</param>
void LogError(string message);

/// <summary>
/// Log at the error level. Includes the Mod's name in the output.
/// </summary>
/// <param name="message">Message to log</param>
void LogError(object message);

/// <summary>
/// Log at the fine level. Includes the Mod's name in the output.
/// </summary>
/// <param name="message">Message to log</param>
void LogFine(string message);

/// <summary>
/// Log at the fine level. Includes the Mod's name in the output.
/// </summary>
/// <param name="message">Message to log</param>
void LogFine(object message);

/// <summary>
/// Log at the warn level. Includes the Mod's name in the output.
/// </summary>
/// <param name="message">Message to log</param>
void LogWarn(string message);

/// <summary>
/// Log at the warn level. Includes the Mod's name in the output.
/// </summary>
/// <param name="message">Message to log</param>
void LogWarn(object message);
}
}
34 changes: 2 additions & 32 deletions Assembly-CSharp/IMod.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
namespace Modding
{
/// <inheritdoc />
/// <summary>
/// Base interface for Mods
/// </summary>
public interface IMod
public interface IMod : ILogger
{
/// <summary>
/// Called when class is first constructed.
Expand All @@ -26,37 +27,6 @@ public interface IMod
/// </summary>
/// <returns>If the version is current or not.</returns>
bool IsCurrent();


/// <summary>
/// Log at the info level. Includes the Mod's name in the output.
/// </summary>
/// <param name="message">Message to log</param>
void Log(string message);

/// <summary>
/// Log at the debug level. Includes the Mod's name in the output.
/// </summary>
/// <param name="message">Message to log</param>
void LogDebug(string message);

/// <summary>
/// Log at the error level. Includes the Mod's name in the output.
/// </summary>
/// <param name="message">Message to log</param>
void LogError(string message);

/// <summary>
/// Log at the fine level. Includes the Mod's name in the output.
/// </summary>
/// <param name="message">Message to log</param>
void LogFine(string message);

/// <summary>
/// Log at the warn level. Includes the Mod's name in the output.
/// </summary>
/// <param name="message">Message to log</param>
void LogWarn(string message);
}

/// <inheritdoc />
Expand Down
103 changes: 103 additions & 0 deletions Assembly-CSharp/Loggable.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
namespace Modding
{
/// <inheritdoc />
/// <summary>
/// Base class that allows other classes to have context specific logging
/// </summary>
public abstract class Loggable : ILogger
{
private readonly string _name;

/// <summary>
/// Basic setup for Loggable.
/// </summary>
protected Loggable()
{
_name = GetType().Name;
}

/// <inheritdoc />
/// <summary>
/// Log at the fine/detailed level. Includes the Mod's name in the output.
/// </summary>
/// <param name="message">Message to log</param>
public void LogFine(string message) => Logger.LogFine(FormatLogMessage(message));

/// <inheritdoc />
/// <summary>
/// Log at the fine/detailed level. Includes the Mod's name in the output.
/// </summary>
/// <param name="message">Message to log</param>
public void LogFine(object message) => Logger.LogFine(FormatLogMessage(message));

/// <inheritdoc />
/// <summary>
/// Log at the debug level. Includes the Mod's name in the output.
/// </summary>
/// <param name="message">Message to log</param>
public void LogDebug(string message) => Logger.LogDebug(FormatLogMessage(message));

/// <inheritdoc />
/// <summary>
/// Log at the debug level. Includes the Mod's name in the output.
/// </summary>
/// <param name="message">Message to log</param>
public void LogDebug(object message) => Logger.LogDebug(FormatLogMessage(message));

/// <inheritdoc />
/// <summary>
/// Log at the info level. Includes the Mod's name in the output.
/// </summary>
/// <param name="message">Message to log</param>
public void Log(string message) => Logger.Log(FormatLogMessage(message));

/// <inheritdoc />
/// <summary>
/// Log at the info level. Includes the Mod's name in the output.
/// </summary>
/// <param name="message">Message to log</param>
public void Log(object message) => Logger.Log(FormatLogMessage(message));

/// <inheritdoc />
/// <summary>
/// Log at the warn level. Includes the Mod's name in the output.
/// </summary>
/// <param name="message">Message to log</param>
public void LogWarn(string message) => Logger.LogWarn(FormatLogMessage(message));

/// <inheritdoc />
/// <summary>
/// Log at the warn level. Includes the Mod's name in the output.
/// </summary>
/// <param name="message">Message to log</param>
public void LogWarn(object message) => Logger.LogWarn(FormatLogMessage(message));

/// <inheritdoc />
/// <summary>
/// Log at the error level. Includes the Mod's name in the output.
/// </summary>
/// <param name="message">Message to log</param>
public void LogError(string message) => Logger.LogError(FormatLogMessage(message));

/// <inheritdoc />
/// <summary>
/// Log at the error level. Includes the Mod's name in the output.
/// </summary>
/// <param name="message">Message to log</param>
public void LogError(object message) => Logger.LogError(FormatLogMessage(message));

/// <summary>
/// Formats a log message as "[TypeName] - Message"
/// </summary>
/// <param name="message">Message to be formatted.</param>
/// <returns>Formatted Message</returns>
private string FormatLogMessage(string message) => $"[{_name}] - {message}";

/// <summary>
/// Formats a log message as "[TypeName] - Message"
/// </summary>
/// <param name="message">Message to be formatted.</param>
/// <returns>Formatted Message</returns>
private string FormatLogMessage(object message) => $"[{_name}] - {message.ToString()}";
}
}
40 changes: 39 additions & 1 deletion Assembly-CSharp/Logger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,42 +36,80 @@ static Logger()
/// </summary>
/// <param name="message">Message to log</param>
/// <param name="level">Level of Log</param>
private static void Log(string message, LogLevel level)
public static void Log(string message, LogLevel level)
{
if (_logLevel <= level)
WriteToFile("[" + level.ToString().ToUpper() + "]:" + message + Environment.NewLine);
}

/// <summary>
/// Checks to ensure that the logger level is currently high enough for this message, if it is, write it.
/// </summary>
/// <param name="message">Message to log</param>
/// <param name="level">Level of Log</param>
public static void Log(object message, LogLevel level) => Log(message.ToString(), level);


/// <summary>
/// Finest/Lowest level of logging. Usually reserved for developmental testing.
/// </summary>
/// <param name="message">Message to log</param>
public static void LogFine(string message) => Log(message, LogLevel.Fine);

/// <summary>
/// Finest/Lowest level of logging. Usually reserved for developmental testing.
/// </summary>
/// <param name="message">Message to log</param>
public static void LogFine(object message) => Log(message.ToString(), LogLevel.Fine);

/// <summary>
/// Log at the debug level. Usually reserved for diagnostics.
/// </summary>
/// <param name="message">Message to log</param>
public static void LogDebug(string message) => Log(message, LogLevel.Debug);

/// <summary>
/// Log at the debug level. Usually reserved for diagnostics.
/// </summary>
/// <param name="message">Message to log</param>
public static void LogDebug(object message) => Log(message, LogLevel.Debug);

/// <summary>
/// Log at the info level.
/// </summary>
/// <param name="message">Message to log</param>
public static void Log(string message) => Log(message, LogLevel.Info);

/// <summary>
/// Log at the info level.
/// </summary>
/// <param name="message">Message to log</param>
public static void Log(object message) => Log(message, LogLevel.Info);

/// <summary>
/// Log at the warning level.
/// </summary>
/// <param name="message">Message to log</param>
public static void LogWarn(string message) => Log(message, LogLevel.Warn);

/// <summary>
/// Log at the warning level.
/// </summary>
/// <param name="message">Message to log</param>
public static void LogWarn(object message) => Log(message, LogLevel.Warn);

/// <summary>
/// Log at the error level.
/// </summary>
/// <param name="message">Message to log</param>
public static void LogError(string message) => Log(message, LogLevel.Error);

/// <summary>
/// Log at the error level.
/// </summary>
/// <param name="message">Message to log</param>
public static void LogError(object message) => Log(message, LogLevel.Error);

/// <summary>
/// Locks file to write, writes to file, releases lock.
/// </summary>
Expand Down
Loading

0 comments on commit 340d7d7

Please sign in to comment.