//
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));
}
}
}