Я использую Poco 1.6.0 и структуру Util::ServerApplication
.Poco - отказ openApplication log вызывает отказ в работе подсистемы
В начале int main(const ArgVec& args)
в моем главном классе, я перенаправлять все протоколирование в файл:
Poco::AutoPtr<Poco::FileChannel> chanFile = new Poco::FileChannel;
chanFile->setProperty("path", "C:\\doesnotexist\\file.log");
Poco::Util::Application::instance().logger().setChannel(chanFile);
Если файл журнала не может быть открыт, это вызывает исключение быть выброшено, что я поймать, и вернуть код ошибки от main()
. Код Application::run()
в Poco's Application.cpp
затем звонит Application::uninitialize()
.
Реализация Application::uninitialize()
выполняет итерацию через каждую подсистему, выполняющую эту подсистему uninitialize()
.
Но один из них - LogFile::uninitialize()
, в результате чего регистрируется следующее сообщение: Uninitializing subsystem: Logging Subsystem
.
При попытке зарегистрировать это сообщение возникает исключение, так как файл журнала не может быть открыт (по той же причине, что и раньше). Это исключение поймано где-то в коде Poco, и он пытается зарегистрировать ошибку, которая вызывает исключение, и что она, наконец, завершает работу программы.
Как мне решить эту проблему? Например. можно ли подсказать подсистеме регистрации, чтобы не было никаких исключений?
Кажется, что и большая проблема; если какая-либо подсистема uninitialize()
выбрасывает, это приведет к тому, что выполнение оставит цикл завершения работы подсистемы в Application.cpp
, поэтому другие подсистемы также не смогут отключиться.
В настоящее время работает над ним, регистрируя стартовую строку, видя, что вызывается «FileException», а затем вызывает «setChannel» с консольным каналом, так что 'chanFile' больше не привязан, но он чувствует себя взломанным и также не адресует проблема с остановкой потенциальной подсистемы –