JD2022-TU1/main/tools/framework/JD.LogService/LoggerExtensions.cs

102 lines
No EOL
3.6 KiB
C#

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<Exception>();
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);
}
/// <summary>
/// Returns a logger that prefills the file location with the provided one
/// if the logged error does not provide one.
/// </summary>
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);
});
}
}
}