Usar NLog no aplicativo ASP.NET Core

Achei umCodeProject com um exemplo de como fazer isso funcionar, mas não funciona. O principal problema parece ser que o"Microsoft.Framework.Logging.NLog": "1.0.0-*" O pacote parece não existir no Nuget. Eu olheiesta pergunta StackOverflow e olhou para o exemplo do GitHub que ele faz referência, mas parece conter o mesmo problema.

Tentei fazê-lo funcionar por conta própria e o melhor que descobri é o seguinte:

public class NLogLogger : ILogger
{
    public NLogLogger()
    {
        new WebLoggerConfigurer().ConfigureDefault();
    }

    public void Log(LogLevel logLevel, int eventId, object state, Exception exception, Func<object, Exception, string> formatter)
    {
        // currently need the global:: for LogLevels because our namespace contains NLog in it. Is there a better naming convention we could use instead?
        var ll = logLevel == LogLevel.Debug ? global::NLog.LogLevel.Debug
                : logLevel == LogLevel.Verbose ? global::NLog.LogLevel.Trace
                : logLevel == LogLevel.Critical ? global::NLog.LogLevel.Fatal
                : logLevel == LogLevel.Error ? global::NLog.LogLevel.Error
                : logLevel == LogLevel.Information ? global::NLog.LogLevel.Info
                : logLevel == LogLevel.Warning ? global::NLog.LogLevel.Warn
                : global::NLog.LogLevel.Off;

        LogManager.GetCurrentClassLogger().Log(ll, formatter(state, exception));
    }

    public bool IsEnabled(LogLevel logLevel)
    {
        return true;
    }

    public IDisposable BeginScopeImpl(object state)
    {
        return new Disposable(() => { });
    }
}

public class NLogLoggerProvider : ILoggerProvider
{
    public void Dispose()
    {
    }

    public ILogger CreateLogger(string categoryName)
    {
        return new NLogLogger();
    }
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddProvider(new NLogLoggerProvider());
    ..
}

A implementação do BeginScopeImpl parece um hack, mas eu não tinha certeza da melhor maneira de implementá-lo.

Parece uma opção de implementação válida?Existe alguma maneira melhor de implementar o BeginScopeImpl?Existe outra maneira de fazer o NLog funcionar com o ASP.NET 5?

questionAnswers(4)

yourAnswerToTheQuestion