using System; using System.Collections.Generic; using JD.Collections.Extensions; using JD.Kernel.Structs; using JetBrains.Annotations; namespace JD.LogService { public static class LoggerExtensions { [StringFormatMethod("message")] public static void LogError(this ILogger logger, string message, params object[] args) { logger.LogError(FileLocation.Empty, message, args); } [StringFormatMethod("message")] public static void LogError(this ILogger logger, FileLocation origin, string message, params object[] args) { logger.LogError(LogCategory.Error, origin, message, args); } [StringFormatMethod("message")] public static void LogWarning(this ILogger logger, string message, params object[] args) { logger.LogWarning(FileLocation.Empty, message, args); } [StringFormatMethod("message")] public static void LogWarning(this ILogger logger, FileLocation origin, string message, params object[] args) { logger.LogError(LogCategory.Warning, origin, message, args); } [StringFormatMethod("message")] private static void LogError(this ILogger logger, LogCategory category, FileLocation origin, string message, params object[] args) { logger.Log(new Error(category, message, args) { Origin = origin }); } [StringFormatMethod("message")] public static void LogMessage(this ILogger logger, string message, params object[] args) { logger.Log(new Message(message, args)); } [StringFormatMethod("message")] public static void LogMessage(this ILogger logger, FileLocation origin, string message, params object[] args) { logger.Log(new Message(message, args) { Origin = origin }); } [StringFormatMethod("message")] public static void LogMessage(this ILogger logger, FileLocation origin, MessageImportance importance, string message, params object[] args) { logger.Log(new Message(message, args) { Origin = origin, Importance = importance }); } [StringFormatMethod("message")] public static void LogMessage(this ILogger logger, MessageImportance importance, string message, params object[] args) { logger.Log(new Message(message, args) { Importance = importance }); } [StringFormatMethod("message")] public static void LogException(this ILogger logger, Exception ex, string message, params object[] args) { logger.Log(Error.FromException(ex, message, args)); var allExceptions = new List(); while (ex != null) { allExceptions.Add(ex); ex = ex.InnerException; } var fullDetails = allExceptions.Join($"{Environment.NewLine}->", e => $"{e.Message} {e.StackTrace}"); logger.LogMessage(MessageImportance.Debug, fullDetails); } /// /// Returns a logger that prefills the file location with the provided one /// if the logged error does not provide one. /// public static ILogger OfFileLocation(this ILogger logger, FileLocation fileLocation) { return Logger.FromAction(logEvent => { if (Equals(logEvent.Origin, FileLocation.Empty)) { logEvent.Origin = fileLocation; } logger.Log(logEvent); }); } } }