using System; using Ninject; using NLog; using NLog.Targets; using NLog.Targets.Wrappers; using PetaPoco; namespace NzbDrone.Core.Instrumentation { public class DatabaseTarget : Target { private readonly IDatabase _database; [Inject] public DatabaseTarget(IDatabase database) { _database = database; } protected override void Write(LogEventInfo logEvent) { var log = new Log(); log.Time = logEvent.TimeStamp; log.Message = logEvent.FormattedMessage; if (logEvent.UserStackFrame != null) { log.Method = logEvent.UserStackFrame.GetMethod().Name; } log.Logger = logEvent.LoggerName; if (log.Logger.StartsWith("NzbDrone.")) { log.Logger = log.Logger.Remove(0, 9); } if (logEvent.Exception != null) { if (String.IsNullOrWhiteSpace(log.Message)) { log.Message = logEvent.Exception.Message; } else { log.Message += ": " + logEvent.Exception.Message; } log.Exception = logEvent.Exception.ToString(); log.ExceptionType = logEvent.Exception.GetType().ToString(); } log.Level = logEvent.Level.Name; _database.Insert(log); } } }