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?