@@ -5,6 +5,7 @@ using System.Reflection; | |||
using System.Threading.Tasks; | |||
using Discord.Commands.Builders; | |||
using Microsoft.Extensions.Logging; | |||
namespace Discord.Commands | |||
{ | |||
@@ -34,7 +35,7 @@ namespace Discord.Commands | |||
} | |||
else if (IsLoadableModule(typeInfo)) | |||
{ | |||
await service._cmdLogger.WarningAsync($"Class {typeInfo.FullName} is not public and cannot be loaded. To suppress this message, mark the class with {nameof(DontAutoLoadAttribute)}.").ConfigureAwait(false); | |||
service._cmdLogger.LogWarning($"Class {typeInfo.FullName} is not public and cannot be loaded. To suppress this message, mark the class with {nameof(DontAutoLoadAttribute)}."); | |||
} | |||
} | |||
@@ -69,7 +70,7 @@ namespace Discord.Commands | |||
result[typeInfo.AsType()] = module.Build(service, services); | |||
} | |||
await service._cmdLogger.DebugAsync($"Successfully built {builtTypes.Count} modules.").ConfigureAwait(false); | |||
service._cmdLogger.LogDebug($"Successfully built {builtTypes.Count} modules."); | |||
return result; | |||
} | |||
@@ -8,6 +8,7 @@ using System.Threading; | |||
using System.Threading.Tasks; | |||
using Discord.Commands.Builders; | |||
using Discord.Logging; | |||
using Microsoft.Extensions.Logging; | |||
namespace Discord.Commands | |||
{ | |||
@@ -29,12 +30,6 @@ namespace Discord.Commands | |||
/// </remarks> | |||
public class CommandService : IDisposable | |||
{ | |||
/// <summary> | |||
/// Occurs when a command-related information is received. | |||
/// </summary> | |||
public event Func<LogMessage, Task> Log { add { _logEvent.Add(value); } remove { _logEvent.Remove(value); } } | |||
internal readonly AsyncEvent<Func<LogMessage, Task>> _logEvent = new AsyncEvent<Func<LogMessage, Task>>(); | |||
/// <summary> | |||
/// Occurs when a command is executed. | |||
/// </summary> | |||
@@ -56,8 +51,8 @@ namespace Discord.Commands | |||
internal readonly bool _caseSensitive, _throwOnError, _ignoreExtraArgs; | |||
internal readonly char _separatorChar; | |||
internal readonly RunMode _defaultRunMode; | |||
internal readonly Logger _cmdLogger; | |||
internal readonly LogManager _logManager; | |||
internal readonly ILogger _cmdLogger; | |||
internal readonly ILoggerFactory _logManager; | |||
internal readonly IReadOnlyDictionary<char, char> _quotationMarkAliasMap; | |||
internal bool _isDisposed; | |||
@@ -100,8 +95,14 @@ namespace Discord.Commands | |||
if (_defaultRunMode == RunMode.Default) | |||
throw new InvalidOperationException("The default run mode cannot be set to Default."); | |||
_logManager = new LogManager(config.LogLevel); | |||
_logManager.Message += async msg => await _logEvent.InvokeAsync(msg).ConfigureAwait(false); | |||
_logManager = config.LoggerFactory; | |||
if (_logManager == null) | |||
{ | |||
_logManager = new DefaultLoggerFactory(); | |||
_logManager.AddProvider(new DefaultLoggerProvider()); | |||
} | |||
_cmdLogger = _logManager.CreateLogger("Command"); | |||
_moduleLock = new SemaphoreSlim(1, 1); | |||
@@ -349,7 +350,8 @@ namespace Discord.Commands | |||
public void AddTypeReader(Type type, TypeReader reader) | |||
{ | |||
if (_defaultTypeReaders.ContainsKey(type)) | |||
_ = _cmdLogger.WarningAsync($"The default TypeReader for {type.FullName} was replaced by {reader.GetType().FullName}." + | |||
_cmdLogger.LogWarning( | |||
$"The default TypeReader for {type.FullName} was replaced by {reader.GetType().FullName}." + | |||
"To suppress this message, use AddTypeReader<T>(reader, true)."); | |||
AddTypeReader(type, reader, true); | |||
} | |||
@@ -1,4 +1,5 @@ | |||
using Discord.Commands.Builders; | |||
using Microsoft.Extensions.Logging; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Collections.Immutable; | |||
@@ -240,7 +241,7 @@ namespace Discord.Commands | |||
private async Task<IResult> ExecuteInternalAsync(ICommandContext context, object[] args, IServiceProvider services) | |||
{ | |||
await Module.Service._cmdLogger.DebugAsync($"Executing {GetLogText(context)}").ConfigureAwait(false); | |||
Module.Service._cmdLogger.LogDebug($"Executing {GetLogText(context)}"); | |||
try | |||
{ | |||
var task = _action(context, args, services, this); | |||
@@ -274,7 +275,7 @@ namespace Discord.Commands | |||
ex = ex.InnerException; | |||
var wrappedEx = new CommandException(this, context, ex); | |||
await Module.Service._cmdLogger.ErrorAsync(wrappedEx).ConfigureAwait(false); | |||
Module.Service._cmdLogger.LogError(wrappedEx, wrappedEx.Message); | |||
var result = ExecuteResult.FromError(ex); | |||
await Module.Service._commandExecutedEvent.InvokeAsync(this, context, result).ConfigureAwait(false); | |||
@@ -291,7 +292,7 @@ namespace Discord.Commands | |||
} | |||
finally | |||
{ | |||
await Module.Service._cmdLogger.VerboseAsync($"Executed {GetLogText(context)}").ConfigureAwait(false); | |||
Module.Service._cmdLogger.LogTrace($"Executed {GetLogText(context)}"); | |||
} | |||
} | |||