/// <summary>
        /// Logs the entry.
        /// </summary>
        /// <param name="entry">The entry.</param>
        /// <param name="clientAddress">The client address.</param>
        private void LogEntry(LogEntryMessage entry, string clientAddress)
        {
            switch (entry.Severity)
            {
            case TraceEventType.Critical:
                logger.Fatal(() => this.FormatMessage(entry.Message, clientAddress));
                break;

            case TraceEventType.Error:
                logger.Error(() => this.FormatMessage(entry.Message, clientAddress));
                break;

            case TraceEventType.Warning:
                logger.Warn(() => this.FormatMessage(entry.Message, clientAddress));
                break;

            case TraceEventType.Information:
                logger.Info(() => this.FormatMessage(entry.Message, clientAddress));
                break;

            case TraceEventType.Verbose:
                logger.Debug(() => this.FormatMessage(entry.Message, clientAddress));
                break;
            }
        }
        /// <summary>
        /// Parses Log Entries from the collection of log nodes.
        /// </summary>
        /// <param name="nodes">The collection of Xml nodes which are valid LogEntry nodes.</param>
        /// <param name="result">The TestResult which will host the parsed LogEntries.</param>
        private static void ParseTestCaseLogEntries(XmlNodeList nodes, TestResult result)
        {
            foreach (XmlNode child in nodes)
            {
                if (child.NodeType == XmlNodeType.Element)
                {
                    LogEntry entry = null;

                    switch (child.Name)
                    {
                    case Xml.Info: entry = new LogEntryInfo(child.InnerText); break;

                    case Xml.Message: entry = new LogEntryMessage(child.InnerText); break;

                    case Xml.Warning: entry = new LogEntryWarning(child.InnerText); break;

                    case Xml.Error: entry = ParseTestCaseLogError(child); break;

                    case Xml.FatalError: entry = new LogEntryFatalError(child.InnerText); break;

                    case Xml.Exception: entry = ParseTestCaseLogException(child); break;
                    }

                    if (entry != null)
                    {
                        entry.Source = ParseSourceInfo(child);
                        result.LogEntries.Add(entry);
                    }
                }
            }
        }
Esempio n. 3
0
 /// <summary>
 /// Overridden to redirect to call <see cref="Log"/>.
 /// </summary>
 public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data)
 {
     if ((this.Filter == null) || this.Filter.ShouldTrace(eventCache, source, eventType, id, null, null, data, null))
     {
         if (data is LogEntry)
         {
             data = new LogEntryMessage(base.Formatter, (LogEntry)data);
         }
         Log(eventType, source, id, "{0}", data);
     }
 }
 public static TextWriter WriteJson(TextWriter writer, LogEntryMessage message)
 {
     return(writer
            .WriteJsonStartObject()
            .WriteJsonProperty("level", message.Level).WriteJsonComma()
            .WriteJsonProperty("message", message.Message).WriteJsonComma()
            .WriteJsonProperty("stacktrace", message.Stacktrace).WriteJsonComma()
            .WriteJsonProperty("traceId", message.TraceId).WriteJsonComma()
            .WriteJsonProperty("attachments", message.Attachments, WriteJson)
            .WriteJsonEndObject());
 }
Esempio n. 5
0
        private static void Main(string[] args)
        {
            var jobId = 1;

            ColorConsole.WriteLineGray("Creating Client Actor System");
            var serverLocation = ConfigurationManager.AppSettings["serverLocation"];

            var actorSystem = ActorSystem.Create("ConsoleClient");

            ColorConsole.WriteLineGray("Creating actor supervisory hierarchy");
            var    logger   = actorSystem.ActorSelection($"akka.tcp://{ serverLocation }/user/LogCoordinator");
            var    reporter = actorSystem.ActorSelection($"akka.tcp://{ serverLocation }/user/Report");
            string command;

            do
            {
                ShortPause();

                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.DarkGray;
                ColorConsole.WriteLineGray("enter a command and hit enter");

                command = Console.ReadLine() ?? string.Empty;

                if (command.StartsWith("log"))
                {
                    var appId  = command.Split(',')[1];
                    var logMsg = command.Split(',')[2];

                    var message = new LogEntryMessage(appId, LogEventType.Info, logMsg);
                    logger.Tell(message);
                }

                if (command.StartsWith("rpt"))
                {
                    var report = new ReportMessage(jobId++, command.Split(',')[1]);

                    Task.Run(async() =>
                    {
                        var r   = reporter.Ask(report);
                        var ack = await r;
                        ColorConsole.WriteLineCyan(ack.ToString());
                        ColorConsole.WriteLineGray("");
                    });
                }
            } while (command != "exit");

            actorSystem.Terminate();
            actorSystem.WhenTerminated.Wait();
            ColorConsole.WriteLineGray("Actor system terminated");
            Console.ReadKey();
            Environment.Exit(1);
        }
        private static Dictionary <string, string> GetRaygunErrorMessageData(LogEntryMessage message)
        {
            var data = new Dictionary <string, string>
            {
                { "level", Convert.ToString(message.Level) }
            };

            if (message.Attachments != null && message.Attachments.Any())
            {
                data.Add("attachmentIds", string.Join(",", message.Attachments.Select(a => a.Id)));
            }

            if (!string.IsNullOrEmpty(message.TraceId))
            {
                data.Add("traceId", message.TraceId);
            }

            return(data);
        }
Esempio n. 7
0
        /// <summary>
        /// Translates the incoming <see cref="LogEntryMessage"/> into a <see cref="LogEntry"/>.
        /// </summary>
        /// <param name="entry">
        /// The log entry coming from the client.
        /// </param>
        /// <returns>
        /// A <see cref="LogEntry"/> instance that can be stored in the log.
        /// </returns>
        protected override LogEntry Translate(LogEntryMessage entry)
        {
            var logEntry = entry.ToLogEntry();

            if (logEntry.MachineName == null)
            {
                logEntry.MachineName = string.Empty;
            }

            if (logEntry.ProcessId == null)
            {
                logEntry.ProcessId = string.Empty;
            }

            if (logEntry.ProcessName == null)
            {
                logEntry.ProcessName = string.Empty;
            }

            return(logEntry);
        }
        private RaygunErrorMessage GetRaygunError(LogEntry logEntry)
        {
            var messages = logEntry.Messages.Where(m => m.Level >= _minLevel).ToArray();

            if (messages.Length == 0)
            {
                // If this happens, RabbitMQ binding and config MIN_LEVEL differs -> use message with highest severity
                LogEntryMessage message = messages.MaxBy(m => m.Level);
                return(new RaygunErrorMessage
                {
                    Message = $"{logEntry.ServiceId} {message.Message}",
                    StackTrace = CreateStackTrace(message.Stacktrace),
                    Data = GetRaygunErrorMessageData(message)
                });
            }

            if (messages.Length == 1)
            {
                var message = messages.Single();
                return(new RaygunErrorMessage
                {
                    Message = $"{logEntry.ServiceId} {message.Message}",
                    StackTrace = CreateStackTrace(message.Stacktrace),
                    Data = GetRaygunErrorMessageData(message)
                });
            }

            var highestSeverityMessage = messages.MaxBy(m => m.Level);

            return(new RaygunErrorMessage
            {
                InnerErrors = messages.Select(m => new RaygunErrorMessage
                {
                    Message = m.Message,
                    StackTrace = CreateStackTrace(m.Stacktrace),
                    Data = GetRaygunErrorMessageData(m)
                }).ToArray(),
                Message = $"{logEntry.ServiceId} {highestSeverityMessage.Message}"
            });
        }
 /// <summary>
 /// Overridden to redirect to call <see cref="Log"/>.
 /// </summary>
 public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data)
 {
     if ((this.Filter == null) || this.Filter.ShouldTrace(eventCache, source, eventType, id, null, null, data, null))
     {
         if (data is LogEntry)
         {
             data = new LogEntryMessage(base.Formatter, (LogEntry)data);
         }
         Log(eventType, source, id, "{0}", data);
     }
 }
Esempio n. 10
0
        private void LogButton_Click(object sender, RoutedEventArgs e)
        {
            var message = new LogEntryMessage("UI-Client", LogEventType.Info, LogMessage.Text);

            _api.Tell(message);
        }
Esempio n. 11
0
        private void HandleLogEntryMessage(LogEntryMessage msg)
        {
            var logEntryActor = GetLogEntryActor(msg.AppId);

            logEntryActor.Tell(msg);
        }
Esempio n. 12
0
 private void HandleLogEntryMessage(LogEntryMessage msg)
 {
     File.AppendAllText(_logFileName, $"{ msg }\r\n");
     ColorConsole.WriteLineYellow($"Message logged for LoggerActor '{ msg.AppId }'.");
 }