using System; using System.Diagnostics; using System.IO; using System.Text; using Exceptioneer.WindowsFormsClient; using NLog; using NLog.Config; using NLog.Targets; namespace NzbDrone.Core { public static class Instrumentation { public static void Setup() { // Step 1. Create configuration object var config = new LoggingConfiguration(); const string callSight = "${callsite:className=false:fileName=false:includeSourcePath=false:methodName=true}"; string layout = string.Concat("[${logger}](", callSight, "): ${message}"); // Step 2. Create targets and add them to the configuration var debuggerTarget = new DebuggerTarget { Layout = layout }; var consoleTarget = new ColoredConsoleTarget { Layout = layout }; var fileTarget = new FileTarget { FileName = "${basedir}/test.log", Layout = layout }; config.AddTarget("debugger", debuggerTarget); config.AddTarget("console", consoleTarget); //config.AddTarget("file", fileTarget); // Step 3. Set target properties // Step 4. Define rules //LoggingRule fileRule = new LoggingRule("*", LogLevel.Trace, fileTarget); var debugRule = new LoggingRule("*", LogLevel.Trace, debuggerTarget); var consoleRule = new LoggingRule("*", LogLevel.Trace, consoleTarget); //config.LoggingRules.Add(fileRule); config.LoggingRules.Add(debugRule); config.LoggingRules.Add(consoleRule); // Step 5. Activate the configuration LogManager.Configuration = config; } public static void LogEpicException(Exception e) { try { LogManager.GetLogger("EPICFAIL").FatalException("Unhandled Exception", e); } catch (Exception totalFailException) { Console.WriteLine("TOTAL FAIL:{0}", totalFailException); Console.WriteLine(e.ToString()); } PublishExceptoion(e); } private static bool PublishExceptoion(Exception e) { //Don't publish exceptions when debugging the app. if (Debugger.IsAttached) return false; return new Client { ApiKey = "43BBF60A-EB2A-4C1C-B09E-422ADF637265", ApplicationName = "NZBDrone", CurrentException = e }.Submit(); } public class NlogWriter : TextWriter { private static readonly Logger Logger = LogManager.GetLogger("DB"); public override void Write(char[] buffer, int index, int count) { Write(new string(buffer, index, count)); } public override void Write(string value) { DbAction(value); } private static void DbAction(string value) { Logger.Trace(value); } public override Encoding Encoding { get { return Encoding.Default; } } } } }