private void Write()

in TeamCity.MSBuild.Logger/TeamCityHierarchicalMessageWriter.cs [131:194]


        private void Write([NotNull] string message, [NotNull] Flow flow)
        {
            if (message == null) throw new ArgumentNullException(nameof(message));
            if (flow == null) throw new ArgumentNullException(nameof(flow));

            if (!_messages.TryGetValue(flow, out var messageInfo))
            {
                messageInfo = new MessageInfo();
                _messages.Add(flow, messageInfo);
            }

            messageInfo.Text.Append(message);
            messageInfo.Color = _colorStorage.Color;

            if (!message.EndsWith("\n"))
            {
                return;
            }

            _messages.Remove(flow);
            var messageState = MessageState.Normal;
            if (messageInfo.Color.HasValue)
            {
                // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault
                switch (messageInfo.Color.Value)
                {
                    case Color.Error:
                        messageState = MessageState.Error;
                        break;

                    case Color.ErrorSummary:
                        _buildProblems.Add(messageInfo.Text.ToString().TrimEnd());
                        return;

                    case Color.Warning:
                    case Color.WarningSummary:
                        messageState = MessageState.Warning;
                        break;
                }
            }

            var text = messageInfo.Text.ToString().TrimEnd();
            var hasServiceMessage = false;
            if (_context.Parameters.PlainServiceMessage)
            {

                // TeamCity service message
                var trimmed = text.TrimStart();
                if (trimmed.StartsWith("##teamcity[", StringComparison.CurrentCultureIgnoreCase))
                {
                    foreach (var serviceMessage in _serviceMessageParser.ParseServiceMessages(trimmed))
                    {
                        hasServiceMessage = true;
                        flow.Write(serviceMessage);
                    }
                }
            }

            // MSBuild output
            if (!hasServiceMessage)
            {
                flow.Write(FormatMessage(messageState, messageInfo, text), messageState);
            }
        }