TraceListener which routes all messages through NLog.
Inheritance: System.Diagnostics.TraceListener
Example #1
0
        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);
        }
Example #2
0
        /// <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;
        }