1#pragma once
2
3#include <Poco/ErrorHandler.h>
4#include <common/logger_useful.h>
5#include <Common/Exception.h>
6
7
8/** ErrorHandler for Poco::Thread,
9 * that in case of unhandled exception,
10 * logs exception message and terminates the process.
11 */
12class KillingErrorHandler : public Poco::ErrorHandler
13{
14public:
15 void exception(const Poco::Exception &) { std::terminate(); }
16 void exception(const std::exception &) { std::terminate(); }
17 void exception() { std::terminate(); }
18};
19
20
21/** Log exception message.
22 */
23class ServerErrorHandler : public Poco::ErrorHandler
24{
25public:
26 void exception(const Poco::Exception &) { logException(); }
27 void exception(const std::exception &) { logException(); }
28 void exception() { logException(); }
29
30private:
31 Logger * log = &Logger::get("ServerErrorHandler");
32
33 void logException()
34 {
35 DB::tryLogCurrentException(log);
36 }
37};
38