示例#1
0
        public static void WriteLine(string category, string message)
        {
            if (!CanWrite)
            {
                return;
            }

            CheckInitialization();

            MessageLoggerTokenTree tokens = BuildTokens(
                category,
                message,
                appendNewLine: true
                );

            foreach (ILoggerListener listener in Instance._listeners)
            {
                try {
                    listener.WriteTokens(tokens);
                } catch (System.Exception e) {
                    CanWrite = false;
                    System.Console.WriteLine($"Logger listener ({listener.GetType()}) raised an exception.");
                    LogListenerException(listener, e);
                    Game.Instance.Exit();
                }
            }
        }
示例#2
0
        public static void Write(string message)
        {
            if (!CanWrite)
            {
                return;
            }

            CheckInitialization();

            if (string.IsNullOrEmpty(message))
            {
                return;
            }

            MessageLoggerTokenTree tokens = new MessageLoggerTokenTree()
            {
                TextToken = new TextLoggerToken()
                {
                    Text = message
                }
            };

            foreach (ILoggerListener listener in Instance._listeners)
            {
                try {
                    listener.WriteTokens(tokens);
                } catch (System.Exception e) {
                    CanWrite = false;
                    System.Console.WriteLine($"Logger listener ({listener.GetType()}) raised an exception.");
                    LogListenerException(listener, e);
                    Game.Instance.Exit();
                }
            }
        }
        public void WriteTokens(MessageLoggerTokenTree tokens)
        {
            if (tokens == null)
            {
                throw new System.ArgumentNullException(nameof(tokens));
            }

            if (tokens.HeaderToken != null)
            {
                HeaderLoggerToken header = tokens.HeaderToken;

                if (header.TimestampToken != null)
                {
                    CalculateLeftPadding(0, header.TimestampToken.Timestamp);
                    Write(header.TimestampToken.Timestamp);
                    Write("  ");
                }
                else
                {
                    WritePadding(sectionId: 0);
                }

                if (header.CategoryToken != null)
                {
                    CalculateLeftPadding(1, header.CategoryToken.CategoryName);
                    Write(header.CategoryToken.CategoryName);
                    Write("  ");
                }
                else
                {
                    WritePadding(sectionId: 1);
                }

                if (header.SubjectsToken != null &&
                    header.SubjectsToken.Subjects.Count > 0)
                {
                    string representation = header.SubjectsToken.Subjects[0];

                    for (int i = 1; i < header.SubjectsToken.Subjects.Count; i++)
                    {
                        representation += "->" + header.SubjectsToken.Subjects[i];
                    }

                    Write(representation);
                    Write("  ");
                }
            }

            if (tokens.TextToken != null)
            {
                Write(tokens.TextToken.Text);
            }

            if (AutoFlush)
            {
                Flush();
            }
        }
示例#4
0
        private static MessageLoggerTokenTree BuildTokens(string category, string message, bool appendNewLine = true)
        {
            MessageLoggerTokenTree messageTokenTree = new MessageLoggerTokenTree();

            if (appendNewLine)
            {
                if (message != null)
                {
                    message += NewLine;
                }
                else
                {
                    message = NewLine;
                }
            }

            if (!string.IsNullOrEmpty(message))
            {
                messageTokenTree.TextToken = new TextLoggerToken()
                {
                    Text = message
                };

                if (message.Equals(NewLine))
                {
                    // just a new line message
                    // don't need to insert header and stuff
                    return(messageTokenTree);
                }

                if (IndentLevel > 0)
                {
                    messageTokenTree.TextToken.Text = Instance._indent + messageTokenTree.TextToken.Text;
                }
            }

            messageTokenTree.HeaderToken = new HeaderLoggerToken()
            {
                TimestampToken = new TimestampLoggerToken(System.DateTime.Now)
            };

            if (!string.IsNullOrEmpty(category))
            {
                messageTokenTree.HeaderToken.CategoryToken = new CategoryLoggerToken(category);
            }

            if (Instance._subjects.Count > 0)
            {
                messageTokenTree.HeaderToken.SubjectsToken = new SubjectsLoggerToken();
                foreach (string subject in Instance._subjects)
                {
                    messageTokenTree.HeaderToken.SubjectsToken.AddSubject(subject);
                }
            }

            return(messageTokenTree);
        }
示例#5
0
        public void WriteTokens(MessageLoggerTokenTree tokens)
        {
            if (tokens == null)
            {
                throw new System.ArgumentNullException(nameof(tokens));
            }

            if (tokens.HeaderToken != null)
            {
                HeaderLoggerToken header = tokens.HeaderToken;

                if (header.TimestampToken != null)
                {
                    CalculateLeftPadding(0, header.TimestampToken.Timestamp);
                    WriteToken <TimestampLoggerToken>(header.TimestampToken.Timestamp);
                    WriteMessage("  ");
                }
                else
                {
                    WritePadding(sectionId: 0);
                }

                if (header.CategoryToken != null)
                {
                    string formatedCategoryName = string.Format($"{{0,{_categorySectionLength}}}", header.CategoryToken.CategoryName);
                    CalculateLeftPadding(1, formatedCategoryName);

                    if (_categories.TryGetValue(header.CategoryToken.CategoryName, out TextFormatter categoryFormatter))
                    {
                        WriteFormattedMessage(formatedCategoryName, categoryFormatter);
                    }
                    else
                    {
                        WriteToken <CategoryLoggerToken>(formatedCategoryName);
                    }

                    WriteMessage("  ");
                }
                else
                {
                    WritePadding(sectionId: 1);
                }

                if (header.SubjectsToken != null &&
                    header.SubjectsToken.Subjects.Count > 0)
                {
                    string representation = header.SubjectsToken.Subjects[0];

                    for (int i = 1; i < header.SubjectsToken.Subjects.Count; i++)
                    {
                        representation += "->" + header.SubjectsToken.Subjects[i];
                    }

                    WriteToken <SubjectsLoggerToken>(representation);
                    WriteMessage("  ");
                }
            }

            if (tokens.TextToken != null)
            {
                WriteToken <TextLoggerToken>(tokens.TextToken.Text);
            }

            Flush();
        }
示例#6
0
        public void WriteTokens(MessageLoggerTokenTree tokens)
        {
            if (tokens == null)
            {
                throw new System.ArgumentNullException(nameof(tokens));
            }

            Message lastMessage = LastMessage;

            if (tokens.HeaderToken == null)
            {
                if (tokens.TextToken == null)
                {
                    return;
                }

                if (lastMessage == null || lastMessage.IsClosed)
                {
                    lastMessage = PushEmptyMessage();
                }

                lastMessage.AppendToken(tokens.TextToken, out int newLines);

                if (newLines > 0)
                {
                    Lines += newLines;
                }

                return;
            }

            // check if last message is the same
            if (lastMessage != null)
            {
                if (lastMessage.Equals(tokens))
                {
                    lastMessage.Repeat(tokens.HeaderToken.TimestampToken);
                    lastMessage.Close();
                    return;
                }
                else if (lastMessage.IsOpened)
                {
                    lastMessage.Close();
                }
            }

            lastMessage = PushEmptyMessage();
            List <LoggerToken> tokenList = tokens.Decompose();

            foreach (LoggerToken token in tokenList)
            {
                if (token == null)
                {
                    continue;
                }

                lastMessage.AppendToken(token, out int newLines);

                if (newLines > 0)
                {
                    Lines += newLines;
                }
            }

            TrimExcess();
        }