using rjw.Modules.Shared.Logs; using System; using Verse; namespace RJWSexperience.Logs { // Copy of RJW code because of hardcoded mod name prefix. Maybe TODO: update RJW's version to accept prefix from LogProvider public static class LogManager { public const string LogPrefix = "[Sexperience]"; private class Logger : ILog { private readonly string _loggerTypeName; private readonly ILogProvider _logProvider; public Logger(string typeName, ILogProvider logProvider = null) { _loggerTypeName = typeName; _logProvider = logProvider; } public void Debug(string message) { LogDebug(CreateLogMessage(message)); } public void Debug(string message, Exception e) { LogDebug(CreateLogMessage(message, e)); } public void Message(string message) { LogMessage(CreateLogMessage(message)); } public void Message(string message, Exception e) { LogMessage(CreateLogMessage(message, e)); } public void Warning(string message) { LogWarning(CreateLogMessage(message)); } public void Warning(string message, Exception e) { LogWarning(CreateLogMessage(message, e)); } public void Error(string message) { LogError(CreateLogMessage(message)); } public void Error(string message, Exception e) { LogError(CreateLogMessage(message, e)); } private string CreateLogMessage(string message) { return $"{LogPrefix} [{_loggerTypeName}] {message}"; } private string CreateLogMessage(string message, Exception exception) { return $"{CreateLogMessage(message)}{Environment.NewLine}{exception}"; } private void LogDebug(string message) { if (_logProvider?.IsActive != false) { Log.Message(message); } } private void LogMessage(string message) { if (_logProvider?.IsActive != false) { Log.Message(message); } } private void LogWarning(string message) { if (_logProvider?.IsActive != false) { Log.Warning(message); } } private void LogError(string message) { if (_logProvider?.IsActive != false) { Log.Error(message); } } } public static ILog GetLogger() where TLogProvider : ILogProvider, new() { return new Logger(typeof(TType).Name, new TLogProvider()); } public static ILog GetLogger(string staticTypeName) where TLogProvider : ILogProvider, new() { return new Logger(staticTypeName, new TLogProvider()); } public static ILog GetLogger(string staticTypeName) { return new Logger(staticTypeName); } } }