EasyNetQ is an opinionated fully featured client API for RabbitMQ. It provides extensive diagnostic logging capabilities via LibLog a logging abstraction that provides support for many common logging libraries. Unfortuntely LigLog doesn’t support Microsoft.Extensions.Logging, but this post provides an adaptor, EasyNetQMicrosoftExtensionsLogProvider that will allow EasyNetQ to log to a Microsoft.Extensions.Logging.ILoggerProvider.
Use it like this:
using EasyNetQ;
using EasyNetQ.Logging;
// ...
// loggerProvider is your Microsoft.Extensions.Logging.ILoggerProvider
LogProvider.SetCurrentLogProvider(new EasyNetQMicrosoftExtensionsLogProvider(loggerProvider));
// Call CreateBus after setting the current log provider
RabbitHutch.CreateBus(..);
Copy the code below into a file named EasyNetQMicrosoftExtensionsLogProvider.cs in your project.
using System;
using EasyNetQ.Logging;
using Microsoft.Extensions.Logging;
namespace YourNamespace
{
    public class EasyNetQMicrosoftExtensionsLogProvider : ILogProvider
    {
        private readonly ILoggerProvider loggerProvider;
        public EasyNetQMicrosoftExtensionsLogProvider(ILoggerProvider loggerProvider)
        {
            this.loggerProvider = loggerProvider ?? throw new ArgumentNullException(nameof(loggerProvider));
        }
        public Logger GetLogger(string name)
        {
            var logger = loggerProvider.CreateLogger(name);
            return (logLevel, messageFunc, exception, formatParameters) =>
            {
                if (messageFunc == null)
                {
                    return true;
                }
                var msLogLevel = logLevel switch 
                { 
                    EasyNetQ.Logging.LogLevel.Debug => Microsoft.Extensions.Logging.LogLevel.Debug,
                    EasyNetQ.Logging.LogLevel.Error => Microsoft.Extensions.Logging.LogLevel.Error,
                    EasyNetQ.Logging.LogLevel.Fatal => Microsoft.Extensions.Logging.LogLevel.Critical,
                    EasyNetQ.Logging.LogLevel.Info => Microsoft.Extensions.Logging.LogLevel.Information,
                    EasyNetQ.Logging.LogLevel.Trace => Microsoft.Extensions.Logging.LogLevel.Trace,
                    EasyNetQ.Logging.LogLevel.Warn => Microsoft.Extensions.Logging.LogLevel.Warning,
                    _ => Microsoft.Extensions.Logging.LogLevel.None
                };
                var message = messageFunc();
                if(exception is Exception)
                {
                    logger.Log(msLogLevel, exception, message, formatParameters);
                }
                else
                {
                    logger.Log(msLogLevel, message, formatParameters);
                }
                return true;
            };
        }
        public IDisposable OpenMappedContext(string key, object value, bool destructure = false)
            => NullDisposable.Instance;
        public IDisposable OpenNestedContext(string message)
            => NullDisposable.Instance;
        private class NullDisposable : IDisposable
        {
            internal static readonly IDisposable Instance = new NullDisposable();
            public void Dispose()
            { }
        }
    }
}