mirror of
https://github.com/robbert-vdh/yabridge.git
synced 2026-05-10 04:30:12 +02:00
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:
@@ -116,6 +116,14 @@ Logger Logger::create_wine_stderr() {
|
|||||||
"", std::shared_ptr<std::ostream>(&std::cerr, [](auto*) {}), false);
|
"", 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) {
|
void Logger::log(const std::string& message) {
|
||||||
std::ostringstream formatted_message;
|
std::ostringstream formatted_message;
|
||||||
|
|
||||||
|
|||||||
@@ -137,6 +137,17 @@ class Logger {
|
|||||||
*/
|
*/
|
||||||
static Logger create_wine_stderr();
|
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
|
* Write a message to the log, prefixing it with a timestamp and this
|
||||||
* logger's prefix string.
|
* logger's prefix string.
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ extern "C" VST_EXPORT AEffect* VSTPluginMain(
|
|||||||
|
|
||||||
return &bridge->plugin;
|
return &bridge->plugin;
|
||||||
} catch (const std::exception& error) {
|
} 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 during initialization:");
|
||||||
logger.log(error.what());
|
logger.log(error.what());
|
||||||
|
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ bool InitModule() {
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
} catch (const std::exception& error) {
|
} 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 during initialization:");
|
||||||
logger.log(error.what());
|
logger.log(error.what());
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user