Перед вызовом Exception.ToString()
, Log4net
проверяет, зарегистрирован ли пользовательский IObjectRenderer
для Exception
(как и для любого другого типа) .
Чтобы получить пользовательский вывод Exception
, необходимо создать и зарегистрировать пользовательский IObjectRenderer
.
Приведенный ниже код выведет Exception
в верхнем регистре.
Вы можете создать любое строковое представление сообщения об ошибке, которое вы передадите writer.Write
.
namespace PFX
{
public class MyExceptionRenderer : IObjectRenderer
{
public void RenderObject(RendererMap rendererMap, object obj, TextWriter writer)
{
Exception exception = obj as Exception;
// Format the error message as pleased here.
String error = exception.ToString().ToUpper();
writer.Write(error);
}
}
}
Вы регистрируете MyExceptionRenderer
в вашей конфигурации Log4net
, как показано ниже.
<log4net>
<appender name="consoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date | %logger | %level | %message | %exception%n" />
</layout>
</appender>
<root>
<level value="All" />
<appender-ref ref="consoleAppender" />
</root>
<renderer renderingClass="PFX.MyExceptionRenderer"
renderedClass="System.Exception" />
</log4net>
код ниже
var logger = LogManager.GetLogger("AppLog");
var exception = new ApplicationException("Ooops");
logger.Error("An error occured.", exception);
будет иметь следующий вывод журнала.
Обратите внимание, что исключение полностью прописано.
2019-05-08 21:52:22,855 | AppLog | ERROR | An error occured. | SYSTEM.APPLICATIONEXCEPTION: OOOPS