// namespace DotNetOpenAuth.Loggers { using System; using System.Globalization; using System.IO; using System.Reflection; internal class NLogLogger : ILog { private NLog.Logger nLogLogger; private NLogLogger(NLog.Logger logger) { this.nLogLogger = logger; } #region ILog Members public bool IsDebugEnabled { get { return this.nLogLogger.IsDebugEnabled; } } public bool IsInfoEnabled { get { return this.nLogLogger.IsInfoEnabled; } } public bool IsWarnEnabled { get { return this.nLogLogger.IsWarnEnabled; } } public bool IsErrorEnabled { get { return this.nLogLogger.IsErrorEnabled; } } public bool IsFatalEnabled { get { return this.nLogLogger.IsFatalEnabled; } } #endregion private static bool IsNLogPresent { get { try { Assembly.Load("NLog"); return true; } catch (FileNotFoundException) { return false; } } } #region ILog methods public void Debug(object message) { this.nLogLogger.Debug(message); } public void Debug(object message, Exception exception) { this.nLogLogger.DebugException(String.Format("{0}", message), exception); } public void DebugFormat(string format, params object[] args) { this.nLogLogger.Debug(CultureInfo.InvariantCulture, format, args); } public void DebugFormat(string format, object arg0) { this.nLogLogger.Debug(format, arg0); } public void DebugFormat(string format, object arg0, object arg1) { this.nLogLogger.Debug(format, arg0, arg1); } public void DebugFormat(string format, object arg0, object arg1, object arg2) { this.nLogLogger.Debug(format, arg0, arg1, arg2); } public void DebugFormat(IFormatProvider provider, string format, params object[] args) { this.nLogLogger.Debug(provider, format, args); } public void Info(object message) { this.nLogLogger.Info(message); } public void Info(object message, Exception exception) { this.nLogLogger.InfoException(String.Format("{0}", message), exception); } public void InfoFormat(string format, params object[] args) { this.nLogLogger.Info(CultureInfo.InvariantCulture, format, args); } public void InfoFormat(string format, object arg0) { this.nLogLogger.Info(format, arg0); } public void InfoFormat(string format, object arg0, object arg1) { this.nLogLogger.Info(format, arg0, arg1); } public void InfoFormat(string format, object arg0, object arg1, object arg2) { this.nLogLogger.Info(format, arg0, arg1, arg2); } public void InfoFormat(IFormatProvider provider, string format, params object[] args) { this.nLogLogger.Info(provider, format, args); } public void Warn(object message) { this.nLogLogger.Warn(message); } public void Warn(object message, Exception exception) { this.nLogLogger.Warn(String.Format("{0}", message), exception); } public void WarnFormat(string format, params object[] args) { this.nLogLogger.Warn(CultureInfo.InvariantCulture, format, args); } public void WarnFormat(string format, object arg0) { this.nLogLogger.Warn(format, arg0); } public void WarnFormat(string format, object arg0, object arg1) { this.nLogLogger.Warn(format, arg0, arg1); } public void WarnFormat(string format, object arg0, object arg1, object arg2) { this.nLogLogger.Warn(format, arg0, arg1, arg2); } public void WarnFormat(IFormatProvider provider, string format, params object[] args) { this.nLogLogger.Warn(provider, format, args); } public void Error(object message) { this.nLogLogger.Error(message); } public void Error(object message, Exception exception) { this.nLogLogger.Error(String.Format("{0}", message), exception); } public void ErrorFormat(string format, params object[] args) { this.nLogLogger.Error(CultureInfo.InvariantCulture, format, args); } public void ErrorFormat(string format, object arg0) { this.nLogLogger.Error(format, arg0); } public void ErrorFormat(string format, object arg0, object arg1) { this.nLogLogger.Error(format, arg0, arg1); } public void ErrorFormat(string format, object arg0, object arg1, object arg2) { this.nLogLogger.Error(format, arg0, arg1, arg2); } public void ErrorFormat(IFormatProvider provider, string format, params object[] args) { this.nLogLogger.Error(provider, format, args); } public void Fatal(object message) { this.nLogLogger.Fatal(message); } public void Fatal(object message, Exception exception) { this.nLogLogger.Fatal(String.Format("{0}", message), exception); } public void FatalFormat(string format, params object[] args) { this.nLogLogger.Fatal(CultureInfo.InvariantCulture, format, args); } public void FatalFormat(string format, object arg0) { this.nLogLogger.Fatal(format, arg0); } public void FatalFormat(string format, object arg0, object arg1) { this.nLogLogger.Fatal(format, arg0, arg1); } public void FatalFormat(string format, object arg0, object arg1, object arg2) { this.nLogLogger.Fatal(format, arg0, arg1, arg2); } public void FatalFormat(IFormatProvider provider, string format, params object[] args) { this.nLogLogger.Fatal(provider, format, args); } #endregion /// /// Returns a new NLog logger if it exists, or returns null if the assembly cannot be found. /// /// The created instance. internal static ILog Initialize(string name) { try { return IsNLogPresent ? CreateLogger(name) : null; } catch (FileLoadException) { // wrong NLog.dll version return null; } catch (TargetInvocationException) { // Thrown due to some security issues on .NET 4.5. return null; } catch (TypeLoadException) { // Thrown by mono (http://stackoverflow.com/questions/10805773/error-when-pushing-dotnetopenauth-to-staging-or-production-environment) return null; } } /// /// Creates the NLogLogger. Call ONLY after NLog.dll is known to be present. /// /// The created instance. private static ILog CreateLogger(string name) { return new NLogLogger(NLog.LogManager.GetLogger(name)); } } }