summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2018-02-10 15:40:46 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2018-03-03 00:39:17 +0000
commit9144f234f0cde55398d19696e42da8dea9c7bade (patch)
tree75a4541cefd744c5a299fa347a6d09c283318455
parentAdd some nice cxxflags (diff)
downloadicespider-9144f234f0cde55398d19696e42da8dea9c7bade.tar.bz2
icespider-9144f234f0cde55398d19696e42da8dea9c7bade.tar.xz
icespider-9144f234f0cde55398d19696e42da8dea9c7bade.zip
Default 500 error handler
Include the exception class name in the error report into the default error page. Write the same output to the error log after the request dump.
-rw-r--r--icespider/core/core.cpp7
-rw-r--r--icespider/unittests/testApp.cpp2
2 files changed, 6 insertions, 3 deletions
diff --git a/icespider/core/core.cpp b/icespider/core/core.cpp
index d63464e..057faa6 100644
--- a/icespider/core/core.cpp
+++ b/icespider/core/core.cpp
@@ -4,6 +4,7 @@
#include <Ice/ObjectAdapter.h>
#include <boost/filesystem/convenience.hpp>
#include <factory.impl.h>
+#include <compileTimeFormatter.h>
INSTANTIATEFACTORY(IceSpider::Plugin, Ice::CommunicatorPtr, Ice::PropertiesPtr);
INSTANTIATEPLUGINOF(IceSpider::ErrorHandler);
@@ -105,15 +106,17 @@ namespace IceSpider {
defaultErrorReport(request, exception);
}
+ AdHocFormatter(LogExp, "Exception type: %?\nDetail: %?\n");
void
Core::defaultErrorReport(IHttpRequest * request, const std::exception & exception) const
{
char * buf = __cxxabiv1::__cxa_demangle(typeid(exception).name(), NULL, NULL, NULL);
request->setHeader("Content-Type", "text/plain");
request->response(500, buf);
- free(buf);
- request->getOutputStream() << exception.what();
+ LogExp::write(request->getOutputStream(), buf, exception.what());
request->dump(std::cerr);
+ LogExp::write(std::cerr, buf, exception.what());
+ free(buf);
}
Ice::ObjectPrx
diff --git a/icespider/unittests/testApp.cpp b/icespider/unittests/testApp.cpp
index 5832595..9714d33 100644
--- a/icespider/unittests/testApp.cpp
+++ b/icespider/unittests/testApp.cpp
@@ -527,7 +527,7 @@ BOOST_AUTO_TEST_CASE( testErrorHandler_Unhandled )
BOOST_REQUIRE_EQUAL(h["Content-Type"], "text/plain");
auto & o = requestDeleteItem.output;
auto b = o.str().substr(o.tellg());
- BOOST_REQUIRE_EQUAL(b, "test error");
+ BOOST_REQUIRE_EQUAL(b, "Exception type: TestIceSpider::Ex\nDetail: test error\n");
}
BOOST_AUTO_TEST_CASE( testErrorHandler_Handled1 )