Я нашел CodeProject с примером того, как заставить это работать, но он не работает. Основная проблема заключается в том, что пакет "Microsoft.Framework.Logging.NLog": "1.0.0-*"
, похоже, не существует в Nuget. Я рассмотрел qaru.site/info/240424/... и посмотрел на пример GitHub, на котором он ссылается, но, похоже, содержит ту же проблему.
Я попытался заставить его работать самостоятельно, и лучшее, что я придумал, следующее:
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());
..
}
Реализация BeginScopeImpl кажется взломом, но я не знал, как лучше всего ее реализовать.
- Это похоже на действительный вариант реализации?
- Есть ли лучший способ реализации BeginScopeImpl?
- Есть ли другой способ заставить NLog работать с ASP.NET 5?