private static void EnableVerboseOutput() { InitLogging(); LogManager.GetLogger("GrooveCaster").Info("Starting GrooveCaster at {0}.", DateTime.UtcNow); var s_Listener = new NLogTraceListener(); Trace.Listeners.Add(s_Listener); }
/// <summary> /// Configures NLOG to our needs /// Spawns a Debug Target as well as a "normal" Log Target /// </summary> /// <param name="appName">Name of the Application</param> /// <param name="logFileName">Name of the Logfile</param> /// <param name="logLevel"><see cref="System.LogLevel"/> to use</param> public static void ConfigureLogging(string appName, string logFileName, LogLevel logLevel, bool logPerformance, bool enableSqlTrace, bool enableDotNetTrace) { // Step 1. Create configuration object var config = new LoggingConfiguration(); // Step 2. Create targets and add them to the configuration var logTarget = new FileTarget { Encoding = Encoding.UTF8 }; config.AddTarget("log", logTarget); logTarget.FileName = logFileName; // debugTarget.Layout = @"[${date:format=yyyy\.MM\.dd HH\:mm\:ss}] [${level}] [${callsite:fileName=True:className=False:methodName=True:includeSourcePath=False}]: ${message} ${exception:format=Method,Message,StackTrace:separator=\n}"; logTarget.Layout = @"[${date:universalTime=true:format=u}]" + " [${processid:fixedLength=True:padding=5:padCharacter= }] [${threadid:fixedLength=True:padding=5:padCharacter= }] [${level:fixedLength=True:padding=5:padCharacter= :upperCase=True}] [${callsite:fileName=True:className=False:methodName=True:includeSourcePath=False:padding=35:padCharacter= }] ${message} ${exception:maxInnerExceptionLevel=3:format=Method,Message,StackTrace:innerFormat=Method,Message,StackTrace:separator=\r\n:innerExceptionSeparator=\r\n}"; logTarget.ArchiveAboveSize = 1024 * 1024 * 100; logTarget.MaxArchiveFiles = 10; logTarget.KeepFileOpen = true; // logTarget.Header = "\r\nTime\tProcessID\tThreadID\tLogLevel\tCallSite\tMessage/Exception"; logTarget.ConcurrentWrites = true; var logWrapper = new AsyncTargetWrapper { BatchSize = 500, WrappedTarget = logTarget, QueueLimit = 5000, OverflowAction = AsyncTargetWrapperOverflowAction.Block, TimeToSleepBetweenBatches = 250 }; var debugTarget = new FileTarget { Encoding = Encoding.UTF8 }; config.AddTarget("debug", debugTarget); var debugFileInfo = new FileInfo(logFileName); var directory = debugFileInfo.DirectoryName; var fileExtension = debugFileInfo.Extension; var fileName = debugFileInfo.Name; var fileNameNew = fileName.Substring(0, fileName.Length - fileExtension.Length); var fileNameNewFull = Path.Combine(directory, fileNameNew + ".errors." + fileExtension); debugTarget.FileName = fileNameNewFull; // debugTarget.Layout = @"[${date:format=yyyy\.MM\.dd HH\:mm\:ss}] [${level}] [${callsite:fileName=True:className=False:methodName=True:includeSourcePath=False}]: ${message} ${exception:format=Method,Message,StackTrace:separator=\n}"; debugTarget.Layout = @"[${date:universalTime=true:format=u}]" + " [${processid:fixedLength=True:padding=5:padCharacter= }] [${threadid:fixedLength=True:padding=5:padCharacter= }] [${level:fixedLength=True:padding=5:padCharacter= :upperCase=True}] [${callsite:fileName=True:className=False:methodName=True:includeSourcePath=False:padding=35:padCharacter= }] ${message} ${exception:format=Method,Message,StackTrace:separator=\r\n}"; debugTarget.ArchiveAboveSize = 1024 * 1024 * 100; debugTarget.MaxArchiveFiles = 10; debugTarget.KeepFileOpen = true; debugTarget.Header = "\r\nTime\tProcessID\tThreadID\tLogLevel\tCallSite\tMessage/Exception"; debugTarget.ConcurrentWrites = true; var debugwrapper = new AsyncTargetWrapper { BatchSize = 500, WrappedTarget = debugTarget, QueueLimit = 5000, OverflowAction = AsyncTargetWrapperOverflowAction.Block, TimeToSleepBetweenBatches = 250 }; var performanceLevel = logPerformance ? logLevel : LogLevel.Off; var rule = new LoggingRule("VerboseTrace", performanceLevel, logWrapper) { Final = true }; var rule1 = new LoggingRule("*", logLevel, logWrapper); var rule2 = new LoggingRule("*", LogLevel.Error, debugwrapper); config.LoggingRules.Add(rule); config.LoggingRules.Add(rule1); config.LoggingRules.Add(rule2); // Step 5. Activate the configuration LogManager.Configuration = config; // Get Assembly Version var myAssembly = Assembly.GetExecutingAssembly(); var myAssemblyName = myAssembly.GetName(); Logger.Info("{0} v{1}", appName, myAssemblyName.Version); Logger.Trace("Configured logging."); if (enableDotNetTrace || enableSqlTrace) { var listener = new NLogTraceListener(); listener.AutoLoggerName = true; listener.DefaultLogLevel = logLevel; Trace.Listeners.Add(listener); } if (enableSqlTrace) { SD.LLBLGen.Pro.ORMSupportClasses.TraceHelper.PersistenceExecutionSwitch.Level = TraceLevel.Verbose; } AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException; }