Add a special exception logger

We'll need this to make sure that we can redirect caught exceptions
printed in `src/common/` to the correct file if `YABRIDGE_DEBUG_FILE` is
set.
This commit is contained in:
Robbert van der Helm
2021-07-23 15:41:38 +02:00
parent 0e838fa947
commit 1a34a80c21
4 changed files with 21 additions and 2 deletions
+8
View File
@@ -116,6 +116,14 @@ Logger Logger::create_wine_stderr() {
"", std::shared_ptr<std::ostream>(&std::cerr, [](auto*) {}), false);
}
Logger Logger::create_exception_logger() {
#ifdef __WINE__
return Logger::create_wine_stderr();
#else
return Logger::create_from_environment("[error] ");
#endif
}
void Logger::log(const std::string& message) {
std::ostringstream formatted_message;
+11
View File
@@ -137,6 +137,17 @@ class Logger {
*/
static Logger create_wine_stderr();
/**
* Create a special logger instance for printing caught exceptions. This
* simply calls `Logger::create_from_environment()` on the plugin side, and
* `Logger::create_wine_stderr()` on the Wine side. Printing directly to
* STDERR on the Wine side is fine, but on the plugin side that means that
* we cannot redirect the output with `YABRIDGE_DEBUG_FILE`. So this should
* also be used instead of writing to `std::cerr` when catching exceptions
* in `src/common/`.
*/
static Logger create_exception_logger();
/**
* Write a message to the log, prefixing it with a timestamp and this
* logger's prefix string.
+1 -1
View File
@@ -50,7 +50,7 @@ extern "C" VST_EXPORT AEffect* VSTPluginMain(
return &bridge->plugin;
} catch (const std::exception& error) {
Logger logger = Logger::create_from_environment();
Logger logger = Logger::create_exception_logger();
logger.log("Error during initialization:");
logger.log(error.what());
+1 -1
View File
@@ -53,7 +53,7 @@ bool InitModule() {
return true;
} catch (const std::exception& error) {
Logger logger = Logger::create_from_environment();
Logger logger = Logger::create_exception_logger();
logger.log("Error during initialization:");
logger.log(error.what());