171 lines
6.2 KiB
C#
171 lines
6.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Reflection;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace GamecraftModdingAPI.Utility
|
|
{
|
|
/// <summary>
|
|
/// Utility class to access Gamecraft's built-in logging capabilities.
|
|
/// The log is saved to %APPDATA%\..\LocalLow\FreeJam\Gamecraft\Player.Log
|
|
/// </summary>
|
|
static class Logging
|
|
{
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void Log(string msg)
|
|
{
|
|
Svelto.Console.Log(msg);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Write a regular message to Gamecraft's log
|
|
/// </summary>
|
|
/// <param name="obj">The object to log</param>
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void Log(object obj)
|
|
{
|
|
Svelto.Console.Log(obj.ToString());
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void LogDebug(string msg)
|
|
{
|
|
Svelto.Console.LogDebug(msg);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Write a debug message to Gamecraft's log
|
|
/// </summary>
|
|
/// <param name="obj">The object to log</param>
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void LogDebug(object obj)
|
|
{
|
|
Svelto.Console.LogDebug(obj.ToString());
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void LogDebug<T>(string msg, T extraDebug)
|
|
{
|
|
Svelto.Console.LogDebug<T>(msg, extraDebug);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Write a debug message and object to Gamecraft's log
|
|
/// The reason this method exists in Svelto.Console is beyond my understanding
|
|
/// </summary>
|
|
/// <typeparam name="T">The type of the extra debug object</typeparam>
|
|
/// <param name="obj">The object to log</param>
|
|
/// <param name="extraDebug">The extra object to log</param>
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void LogDebug<T>(object obj, T extraDebug)
|
|
{
|
|
Svelto.Console.LogDebug<T>(obj.ToString(), extraDebug);
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void LogError(string msg, Dictionary<string, string> extraData = null)
|
|
{
|
|
Svelto.Console.LogError(msg, extraData);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Write an error message to Gamecraft's log
|
|
/// </summary>
|
|
/// <param name="obj">The object to log</param>
|
|
/// <param name="extraData">The extra data to pass to the ILogger</param>
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void LogError(object obj, Dictionary<string, string> extraData = null)
|
|
{
|
|
Svelto.Console.LogError(obj.ToString(), extraData);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Write an exception to Gamecraft's log
|
|
/// </summary>
|
|
/// <param name="e">The exception to log</param>
|
|
/// <param name="extraData">The extra data to pass to the ILogger.
|
|
/// This is automatically populated with "OuterException#" and "OuterStacktrace#" entries</param>
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void LogException(Exception e, Dictionary<string, string> extraData = null)
|
|
{
|
|
Svelto.Console.LogException(e, extraData);
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void LogException(string msg, Exception e, Dictionary<string, string> extraData = null)
|
|
{
|
|
Svelto.Console.LogException(msg, e, extraData);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Write an exception message to Gamecraft's log
|
|
/// </summary>
|
|
/// <param name="obj">The object to log</param>
|
|
/// <param name="e">The exception to log</param>
|
|
/// <param name="extraData">The extra data to pass to the ILogger.
|
|
/// This is implemented similar to LogException(Exception e, Dictionary extraData)'s extraData</param>
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void LogException(object obj, Exception e, Dictionary<string, string> extraData = null)
|
|
{
|
|
Svelto.Console.LogException(obj.ToString(), e, extraData);
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void LogWarning(string msg)
|
|
{
|
|
Svelto.Console.LogWarning(msg);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Write a warning message to Gamecraft's log
|
|
/// </summary>
|
|
/// <param name="obj">The object to log</param>
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void LogWarning(object obj)
|
|
{
|
|
Svelto.Console.LogWarning(obj.ToString());
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void SystemLog(string msg)
|
|
{
|
|
Svelto.Console.SystemLog(msg);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Write a message to stdout (ie the terminal, like Command Prompt or PowerShell)
|
|
/// </summary>
|
|
/// <param name="obj">The object to log</param>
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void SystemLog(object obj)
|
|
{
|
|
Svelto.Console.SystemLog(obj.ToString());
|
|
}
|
|
|
|
/// <summary>
|
|
/// Write a descriptive message to Gamecraft's log only when the API is a Debug build
|
|
/// </summary>
|
|
/// <param name="obj">The object to log</param>
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void MetaDebugLog(object obj)
|
|
{
|
|
#if DEBUG
|
|
MetaLog($"[MetaDebug]{obj.ToString()}");
|
|
#endif
|
|
}
|
|
|
|
/// <summary>
|
|
/// Write a descriptive message to Gamecraft's log including the current time and the DLL's name
|
|
/// </summary>
|
|
/// <param name="obj">The object to log</param>
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void MetaLog(object obj)
|
|
{
|
|
var callAsm = Assembly.GetCallingAssembly();
|
|
Log($"[{DateTime.Now.ToString()}][{callAsm.GetName().Name}]{obj.ToString()}");
|
|
}
|
|
}
|
|
}
|