protected override void Append()

in src/log4net/Appender/AnsiColorTerminalAppender.cs [243:296]


  protected override void Append(LoggingEvent loggingEvent)
  {
    string loggingMessage = RenderLoggingEvent(loggingEvent.EnsureNotNull());

    // see if there is a specified lookup.
    if (_levelMapping.Lookup(loggingEvent.Level) is LevelColors levelColors)
    {
      // Prepend the Ansi Color code
      loggingMessage = levelColors.CombinedColor + loggingMessage;
    }

    // on most terminals there are weird effects if we don't clear the background color
    // before the new line.  This checks to see if it ends with a newline, and if
    // so, inserts the clear codes before the newline, otherwise the clear codes
    // are inserted afterward.
    if (loggingMessage.Length > 1)
    {
      if (loggingMessage.EndsWith("\r\n") || loggingMessage.EndsWith("\n\r"))
      {
        loggingMessage = loggingMessage.Insert(loggingMessage.Length - 2, PostEventCodes);
      }
      else if (loggingMessage.EndsWith("\n") || loggingMessage.EndsWith("\r"))
      {
        loggingMessage = loggingMessage.Insert(loggingMessage.Length - 1, PostEventCodes);
      }
      else
      {
        loggingMessage += PostEventCodes;
      }
    }
    else
    {
      if (loggingMessage[0] is '\n' or '\r')
      {
        loggingMessage = PostEventCodes + loggingMessage;
      }
      else
      {
        loggingMessage += PostEventCodes;
      }
    }

    if (_writeToErrorStream)
    {
      // Write to the error stream
      Console.Error.Write(loggingMessage);
    }
    else
    {
      // Write to the output stream
      Console.Write(loggingMessage);
    }

  }