Created
June 6, 2015 20:13
-
-
Save rossmerr/0d6a749ccc403a4937e4 to your computer and use it in GitHub Desktop.
Log4NetLoggerProvider for ASP.NET 5 (vnext)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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