2023-10-12 18:37:25 +03:00
|
|
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
|
using Remora.Discord.Commands.Extensions;
|
|
|
|
|
using Remora.Results;
|
|
|
|
|
|
|
|
|
|
namespace Octobot.Extensions;
|
|
|
|
|
|
|
|
|
|
public static class LoggerExtensions
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Checks if the <paramref name="result" /> has failed due to an error that has resulted from neither invalid user
|
|
|
|
|
/// input nor the execution environment and logs the error using the provided <paramref name="logger" />.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// This has special behavior for <see cref="ExceptionError" /> - its exception will be passed to the
|
|
|
|
|
/// <paramref name="logger" />
|
|
|
|
|
/// </remarks>
|
|
|
|
|
/// <param name="logger">The logger to use.</param>
|
|
|
|
|
/// <param name="result">The Result whose error check.</param>
|
|
|
|
|
/// <param name="message">The message to use if this result has failed.</param>
|
|
|
|
|
public static void LogResult(this ILogger logger, IResult result, string? message = "")
|
|
|
|
|
{
|
|
|
|
|
if (result.IsSuccess || result.Error.IsUserOrEnvironmentError())
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (result.Error is ExceptionError exe)
|
|
|
|
|
{
|
2023-10-26 17:54:15 +03:00
|
|
|
|
if (exe.Exception is TaskCanceledException)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2023-10-12 18:37:25 +03:00
|
|
|
|
logger.LogError(exe.Exception, "{ErrorMessage}", message);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2023-12-31 13:42:59 +03:00
|
|
|
|
logger.LogWarning("{UserMessage}{NewLine}{ResultErrorMessage}", message, Environment.NewLine,
|
|
|
|
|
result.Error.Message);
|
2023-10-12 18:37:25 +03:00
|
|
|
|
}
|
|
|
|
|
}
|