Обработка ошибок AdoNetAppender, сгенерированных через Log4Net
Я использую Log4Net и вместо того, чтобы использовать файл конфигурации XML, я строю и fileAppender, и AdoNetAppender полностью в коде. Когда adoNetAppender не может подключиться к указанной базе данных, он использует и записывает ошибку в окно консоли, а не выдает ее. Это делает невозможным для меня поймать. В конечном итоге я хотел бы отловить ошибку конфигурации, а затем загрузить файл приложения, если БД не работает.
try {
log4net.Repository.Hierarchy.Hierarchy hier = log4net.LogManager.GetRepository() as log4net.Repository.Hierarchy.Hierarchy;
if (hier != null)
{
log4net.Appender.AdoNetAppender adoAppender = new log4net.Appender.AdoNetAppender();
adoAppender.Name = "AdoNetAppender";
// more code..
}
catch (Exception ex)
{
LoadFileAppender(level);
Log log = new Log("AdoAdaptorFail");
log.Error("AdoAdaptor Failed", "System", ex);
}
Он никогда не попадает в этот оператор catch из-за использования этой ошибки.
Любой совет, как справиться?
1 ответ
Может быть, рассмотреть вопрос об установке ReConnectOnError
свойство (с очень коротким временем ожидания в строке подключения):
http://logging.apache.org/log4net/release/sdk/log4net.Appender.AdoNetAppender.ReconnectOnError.html
Log4net сделан специально для того, чтобы он никогда не проходил через исключение. Я полагаю, что вы можете либо изменить аппендер, либо извлечь его из него, чтобы изменить это поведение.