diff --git a/src/Topshelf.Elmah/ElmahConfigurationExtensions.cs b/src/Topshelf.Elmah/ElmahConfigurationExtensions.cs index 7e761868..6ef5d018 100644 --- a/src/Topshelf.Elmah/ElmahConfigurationExtensions.cs +++ b/src/Topshelf.Elmah/ElmahConfigurationExtensions.cs @@ -28,5 +28,15 @@ public static void UseElmah(this HostConfigurator configurator) { ElmahLogWriterFactory.Use(); } + + /// + /// Specify that you want to use the Elmah logging engine. + /// + /// + /// The desired level of elmah logging + public static void UseElmah(this HostConfigurator configurator, ElmahLogLevels logLevels) + { + ElmahLogWriterFactory.Use(logLevels); + } } } \ No newline at end of file diff --git a/src/Topshelf.Elmah/Logging/ElmahLogWriter.cs b/src/Topshelf.Elmah/Logging/ElmahLogWriter.cs index 5e194eab..4123ba13 100644 --- a/src/Topshelf.Elmah/Logging/ElmahLogWriter.cs +++ b/src/Topshelf.Elmah/Logging/ElmahLogWriter.cs @@ -82,7 +82,8 @@ private void WriteToElmah(ElmahLogLevelsEnum logLevel, string message, Exception error.HostName = Environment.MachineName; error.Detail = exception == null ? message : exception.StackTrace; - _log.Log(error); + if(IsLogLevelEnabled(logLevel)) + _log.Log(error); } private string GetLogLevel(ElmahLogLevelsEnum logLevel) @@ -244,7 +245,23 @@ public void FatalFormat(IFormatProvider provider, string format, params object[] { WriteToElmah(ElmahLogLevelsEnum.Fatal, format, args); } - + private bool IsLogLevelEnabled(ElmahLogLevelsEnum logLevel) + { + switch (logLevel) + { + case ElmahLogLevelsEnum.Debug: + return IsDebugEnabled; + case ElmahLogLevelsEnum.Info: + return IsInfoEnabled; + case ElmahLogLevelsEnum.Warn: + return IsWarnEnabled; + case ElmahLogLevelsEnum.Error: + return IsErrorEnabled; + case ElmahLogLevelsEnum.Fatal: + return IsFatalEnabled; + } + return true; + } public bool IsDebugEnabled { get { return _logLevels.IsDebugEnabled; } diff --git a/src/Topshelf.Elmah/Logging/ElmahLogWriterFactory.cs b/src/Topshelf.Elmah/Logging/ElmahLogWriterFactory.cs index a014282e..9eacce01 100644 --- a/src/Topshelf.Elmah/Logging/ElmahLogWriterFactory.cs +++ b/src/Topshelf.Elmah/Logging/ElmahLogWriterFactory.cs @@ -18,9 +18,15 @@ namespace Topshelf.Logging public class ElmahLogWriterFactory : LogWriterFactory { + private readonly ElmahLogLevels _logLevels; + private ElmahLogWriterFactory(ElmahLogLevels logLevels) + { + _logLevels = logLevels; + } + public LogWriter Get(string name) { - return new ElmahLogWriter(); + return new ElmahLogWriter(_logLevels); } public void Shutdown() @@ -28,9 +34,9 @@ public void Shutdown() } - public static void Use() + public static void Use(ElmahLogLevels logLevels = null) { - HostLogger.UseLogger(new ElmahHostLoggerConfigurator()); + HostLogger.UseLogger(new ElmahHostLoggerConfigurator(logLevels)); } @@ -38,9 +44,15 @@ public static void Use() public class ElmahHostLoggerConfigurator : HostLoggerConfigurator { + private readonly ElmahLogLevels _logLevels; + public ElmahHostLoggerConfigurator(ElmahLogLevels logLevels) + { + _logLevels = logLevels; + } + public LogWriterFactory CreateLogWriterFactory() { - return new ElmahLogWriterFactory(); + return new ElmahLogWriterFactory(_logLevels); } } }