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