Skip to content

Instantly share code, notes, and snippets.

@ngbrown
Last active August 14, 2020 21:06
Show Gist options
  • Save ngbrown/69ae7fa30114227b23171ab5d9ba5345 to your computer and use it in GitHub Desktop.
Save ngbrown/69ae7fa30114227b23171ab5d9ba5345 to your computer and use it in GitHub Desktop.
NHibernate to MicrosoftLogger Factory
using System;
using System.Collections.Generic;
using Microsoft.Extensions.Logging;
using NHibernate;
namespace App.Infrastructure
{
public class NHibernateMicrosoftLoggerFactory : INHibernateLoggerFactory
{
private readonly Microsoft.Extensions.Logging.ILoggerFactory loggerFactory;
public NHibernateMicrosoftLoggerFactory(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory)
{
this.loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
}
public INHibernateLogger LoggerFor(string keyName)
{
var msLogger = this.loggerFactory.CreateLogger(keyName);
return new NHibernateMicrosoftLogger(msLogger);
}
public INHibernateLogger LoggerFor(System.Type type)
{
var msLogger = this.loggerFactory.CreateLogger(type);
return new NHibernateMicrosoftLogger(msLogger);
}
}
public class NHibernateMicrosoftLogger : INHibernateLogger
{
private readonly ILogger msLogger;
public NHibernateMicrosoftLogger(ILogger msLogger)
{
this.msLogger = msLogger ?? throw new ArgumentNullException(nameof(msLogger));
}
private static readonly Dictionary<NHibernateLogLevel, LogLevel> MapLevels =
new Dictionary<NHibernateLogLevel, LogLevel> {
{NHibernateLogLevel.Trace, LogLevel.Trace},
{NHibernateLogLevel.Debug, LogLevel.Debug},
{NHibernateLogLevel.Info, LogLevel.Information},
{NHibernateLogLevel.Warn, LogLevel.Warning},
{NHibernateLogLevel.Error, LogLevel.Error},
{NHibernateLogLevel.Fatal, LogLevel.Critical},
{NHibernateLogLevel.None, LogLevel.None},
};
public void Log(NHibernateLogLevel logLevel, NHibernateLogValues state, Exception exception)
{
this.msLogger.Log(MapLevels[logLevel], exception, state.Format, state.Args);
}
public bool IsEnabled(NHibernateLogLevel logLevel)
{
return this.msLogger.IsEnabled(MapLevels[logLevel]);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment