Skip to content

Instantly share code, notes, and snippets.

@rossmerr
Created June 6, 2015 20:13
Show Gist options
  • Save rossmerr/0d6a749ccc403a4937e4 to your computer and use it in GitHub Desktop.
Save rossmerr/0d6a749ccc403a4937e4 to your computer and use it in GitHub Desktop.
Log4NetLoggerProvider for ASP.NET 5 (vnext)
using System;
using log4net;
using Microsoft.Framework.Logging;
namespace Maps.Infrastructure.Logging
{
public class Log4NetLoggerProvider : ILoggerProvider
{
public ILogger CreateLogger(string name)
{
return new Logger(LogManager.GetLogger(name));
}
public ILogger Create(string name)
{
return new Logger(LogManager.GetLogger(name));
}
public class Logger : ILogger
{
private readonly ILog _logger;
public Logger(ILog logger)
{
_logger = logger;
}
public void Log(LogLevel logLevel, int eventId, object state, Exception exception, Func<object, Exception, string> formatter)
{
var level = GetLogLevel(logLevel);
var message = string.Empty;
if (formatter != null)
{
message = formatter(state, exception);
}
else
{
message = LogFormatter.Formatter(state, exception);
}
if (!string.IsNullOrEmpty(message))
{
ThreadContext.Properties["EventID"] = eventId;
level(message, exception);
}
}
public void Write(LogLevel logLevel, int eventId, object state, Exception exception, Func<object, Exception, string> formatter)
{
Log(logLevel, eventId, state, exception, formatter);
}
public bool IsEnabled(LogLevel logLevel)
{
switch (logLevel)
{
case LogLevel.Critical:
return _logger.IsFatalEnabled;
case LogLevel.Error:
return _logger.IsErrorEnabled;
case LogLevel.Information:
return _logger.IsInfoEnabled;
case LogLevel.Verbose:
return _logger.IsDebugEnabled;
case LogLevel.Warning:
return _logger.IsWarnEnabled;
}
return false;
}
private Action<object, Exception> GetLogLevel(LogLevel logLevel)
{
switch (logLevel)
{
case LogLevel.Verbose: return _logger.Debug;
case LogLevel.Information: return _logger.Info;
case LogLevel.Warning: return _logger.Warn;
case LogLevel.Error: return _logger.Error;
case LogLevel.Critical: return _logger.Fatal;
}
return _logger.Debug;
}
public IDisposable BeginScope(object state)
{
return null;
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment