public static void LiveModel_TraceLogEvent(object sender, TraceLogEventArgs e)
        {
            RLLogLevel logLevel = e.LogLevel;

            switch (logLevel)
            {
            case RLLogLevel.LEVEL_ERROR:
                Console.Error.WriteLine($"LogLevel: {e.LogLevel} LogMessage: {e.Message}");
                break;

            default:
                Console.WriteLine($"LogLevel: {e.LogLevel} LogMessage: {e.Message}");
                break;
            }
        }
Beispiel #2
0
        public void CaptureLogs(
            string sessionName,
            IDictionary <string, TraceEventLevel> providers,
            IDictionary <string, IEnumerable <int> > eventIdFilters = null)
        {
            if (string.IsNullOrEmpty(sessionName))
            {
                throw new ArgumentException(nameof(sessionName));
            }

            if (providers == null)
            {
                throw new ArgumentException(nameof(providers));
            }

            if (this.currentSession != null)
            {
                throw new InvalidOperationException("A trace session is already running.");
            }

            this.currentSession = new TraceEventSession(sessionName);
            foreach (KeyValuePair <string, TraceEventLevel> provider in providers)
            {
                this.currentSession.EnableProvider(provider.Key, provider.Value);
            }

            this.backgroundTraceThread = new Thread(_ =>
            {
                Thread.CurrentThread.Name = $"ListenForEventTraceLogs: {sessionName}";

                this.currentSession.Source.Dynamic.All += data =>
                {
                    EventHandler <TraceLogEventArgs> handler = this.OnTraceLog;
                    if (handler == null)
                    {
                        return;
                    }

                    // Ignore events that seem to come from MDS infrastructure.
                    if (ShouldExcludeEvent(data, eventIdFilters))
                    {
                        return;
                    }

                    var builder = new StringBuilder(1024);
                    builder.Append(data.TimeStamp.ToString("yyyy-MM-ddTHH:mm:ss.fffZ")).Append(':');
                    builder.Append(" [").Append(data.ActivityID.ToString("N").Substring(0, 4));
                    builder.Append(", ").Append(data.RelatedActivityID.ToString("N").Substring(0, 4)).Append("] ");
                    builder.Append(data.EventName).Append(": ");

                    if (this.preferFormattedMessages && !string.IsNullOrEmpty(data.FormattedMessage))
                    {
                        builder.Append(data.FormattedMessage);
                    }
                    else
                    {
                        for (int i = 0; i < data.PayloadNames.Length; i++)
                        {
                            builder.Append(data.PayloadNames[i]).Append('=').Append(data.PayloadValue(i));
                            builder.Append(", ");
                        }

                        // remove trailing ", "
                        builder.Remove(builder.Length - 2, 2);
                    }

                    string message = builder.ToString();
                    var eventArgs  = new TraceLogEventArgs(data.ProviderName, data.Level, message);
                    handler(this, eventArgs);
                };

                // This is a blocking call.
                this.currentSession.Source.Process();
            });

            this.backgroundTraceThread.IsBackground = true;
            this.backgroundTraceThread.Start();
        }
        private void Post_Evemt_TraceLog(object state)
        {
            TraceLogEventArgs e = (TraceLogEventArgs)state;

            TraceLog(this, e);
        }