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(); } } }
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(); } }
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); }
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(); }
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(); }