去年、.NET CORE rc版で実装を行った際、デフォルトのLoggerがいまいち使いにくかったのと、Debugがログファイルに出力できなかったため作ったNLog用のLoggerProvider。
今はもうNugtで同じようなものがありますけど(笑)

NLogLoggerProvider.cs

namespace SqlRock.Logging
{
    public class NLogLoggerProvider : ILoggerProvider
    {
        private bool _disposed = false;

        public NLogLoggerProvider()
        {
        }

        public Microsoft.Extensions.Logging.ILogger CreateLogger(string name)
        {
            return new NLogger(LogManager.GetLogger(name));
        }

        public void Dispose()
        {
            if (!_disposed)
            {
                _disposed = true;
            }
        }

        private class NLogger : Microsoft.Extensions.Logging.ILogger
        {
            private readonly global::NLog.Logger _logger;

            public NLogger(global::NLog.Logger logger)
            {
                _logger = logger;
            }


            public bool IsEnabled(Microsoft.Extensions.Logging.LogLevel logLevel)
            {
                return _logger.IsEnabled(NLogLoggerFactoryExtensions.GetLogLevel(logLevel));
            }

            public void Log<TState>(Microsoft.Extensions.Logging.LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
            {
                var nLogLogLevel = NLogLoggerFactoryExtensions.GetLogLevel(logLevel);
                var message = string.Empty;
                if (formatter != null)
                {
                    message = formatter(state, exception);
                }
                else
                {
                    if (exception != null)
                        message = exception.Message;
                }

                if (!string.IsNullOrEmpty(message))
                {
                    var eventInfo = LogEventInfo.Create(nLogLogLevel, _logger.Name, exception, CultureInfo.InvariantCulture, message);
                    eventInfo.Properties["EventId"] = eventId;
                    _logger.Log(eventInfo);
                }
            }

            public IDisposable BeginScope<TState>(TState state)
            {
                if (state == null)
                {
                    throw new ArgumentNullException(nameof(state));
                }

                return NestedDiagnosticsContext.Push(state.ToString());
            }
        }
    }
}

LoggerContainer.cs

namespace SqlRock.Logging
{
    public class LoggerContainer
    {
        private static LoggerContainer _LoggerContainer = null;
        private ILoggerFactory _LoggerFactory;

        private LoggerContainer()
        {
            _LoggerFactory = GetCurrentLoggerFactory();
        }

        public static LoggerContainer GetInstance()
        {
            if (_LoggerContainer == null)
            {
                _LoggerContainer = new LoggerContainer();
            }
            return _LoggerContainer;
        }

        private ILoggerFactory GetCurrentLoggerFactory()
        {
            LoggerFactory factory = new LoggerFactory();
            factory.AddNLog();
            return factory;
        }

        public ILoggerFactory LoggerFactory
        {
            get
            {
                return _LoggerFactory;
            }
            set
            {
                _LoggerFactory = value;
            }
        }

        /// <summary>
        /// ILoggerの取得
        /// </summary>
        /// <returns></returns>
        public static Microsoft.Extensions.Logging.ILogger CurrentLogger()
        {
            LoggerContainer container = LoggerContainer.GetInstance();
            return container.LoggerFactory.CreateLogger(GetClassFullName());
        }

        /// <summary>
        /// NLogの設定ファイル
        /// ※指定のない場合は、App.config、Web.configの設定が利用される
        /// </summary>
        /// <param name="fileName"></param>
        public static void ConfigureNLog(string fileName)
        {
            LogManager.Configuration = new XmlLoggingConfiguration(fileName, true);
        }

        private static string GetClassFullName()
        {
            string className;
            Type declaringType;
            int framesToSkip = 2;

            do
            {
#if SILVERLIGHT
                StackFrame frame = new StackTrace().GetFrame(framesToSkip);
#else
                StackFrame frame = new StackFrame(framesToSkip, false);
#endif
                MethodBase method = frame.GetMethod();
                declaringType = method.DeclaringType;
                if (declaringType == null)
                {
                    className = method.Name;
                    break;
                }

                framesToSkip++;
                className = declaringType.FullName;
            } while (declaringType.Module.Name.Equals("mscorlib.dll", StringComparison.OrdinalIgnoreCase));

            return className;
        }

    }
}

NLogLoggerFactoryExtensions.cs

namespace SqlRock.Logging
{
    /// <summary>
    /// Summary description for NLogLoggerFactoryExtensions
    /// </summary>
    public static class NLogLoggerFactoryExtensions
    {
        /// <summary>
        /// NLogLoggerProviderをILoggerFactoryにインジェクション
        /// </summary>
        /// <param name="factory"></param>
        /// <returns></returns>
        public static ILoggerFactory AddNLog(this ILoggerFactory factory)
        {
            factory.AddProvider(new NLogLoggerProvider());
            return factory;
        }

        /// <summary>
        /// NLogの設定ファイル
        /// ※指定のない場合は、App.config、Web.configの設定が利用される
        /// </summary>
        /// <param name="env"></param>
        /// <param name="configFileRelativePath"></param>
        public static void ConfigureNLog(this IHostingEnvironment env, string configFileRelativePath)
        {
            var fileName = Path.Combine(Directory.GetParent(env.WebRootPath).FullName, configFileRelativePath);
            LoggerContainer.ConfigureNLog(fileName);
        }

        public static global::NLog.LogLevel GetLogLevel(Microsoft.Extensions.Logging.LogLevel logLevel)
        {
            switch (logLevel)
            {
                case Microsoft.Extensions.Logging.LogLevel.Trace: return global::NLog.LogLevel.Trace;
                case Microsoft.Extensions.Logging.LogLevel.Debug: return global::NLog.LogLevel.Debug;
                case Microsoft.Extensions.Logging.LogLevel.Information: return global::NLog.LogLevel.Info;
                case Microsoft.Extensions.Logging.LogLevel.Warning: return global::NLog.LogLevel.Warn;
                case Microsoft.Extensions.Logging.LogLevel.Error: return global::NLog.LogLevel.Error;
                case Microsoft.Extensions.Logging.LogLevel.Critical: return global::NLog.LogLevel.Fatal;
            }
            return global::NLog.LogLevel.Debug;
        }

    }
}

デフォルトのは使わないので、作成したNLogLoggerProviderを注入

        //loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        //loggerFactory.AddDebug();

        //NLog利用 ※拡張メソッドなので、using SqlRock.Loggingが必要
        loggerFactory.AddNLog();
        //nlog.configは相対パスで指定なので、wwwroot、approotと同じディレクトリにある前提
        env.ConfigureNLog("nlog.config");

利用時は、Log4NetやNlogと同様のインスタンス取得方式

private static readonly ILogger logger = LoggerContainer.CurrentLogger();

「ログ内のクラス名が長くて嫌じゃな」、とかいう時は、GetClassFullName()あたりでゴニョゴニョすれば対応可能。