public void FindAndRender()

in src/log4net/ObjectRenderer/RendererMap.cs [86:132]


  public void FindAndRender(object? obj, TextWriter writer)
  {
    writer.EnsureNotNull();
    if (obj is null)
    {
      writer.Write(SystemInfo.NullText);
    }
    else
    {
      // Optimisation for strings
      if (obj is string str)
      {
        writer.Write(str);
      }
      else
      {
        // Lookup the renderer for the specific type
        try
        {
          Get(obj.GetType()).RenderObject(this, obj, writer);
        }
        catch (Exception e) when (!e.IsFatal())
        {
          // Exception rendering the object
          LogLog.Error(_declaringType, $"Exception while rendering object of type [{obj.GetType().FullName}]", e);

          // return default message
          string objectTypeName = obj.GetType().FullName ?? string.Empty;

          writer.Write($"<log4net.Error>Exception rendering object type [{objectTypeName}]");

          string? exceptionText = null;
          try
          {
            exceptionText = e.ToString();
          }
          catch (Exception inner) when (!inner.IsFatal())
          {
            // Ignore exception
          }

          writer.Write($"<stackTrace>{exceptionText}</stackTrace>");
          writer.Write("</log4net.Error>");
        }
      }
    }
  }