Skip to content

Commit

Permalink
Allow to redirect logging to file, add "[dpf] " string prefix
Browse files Browse the repository at this point in the history
Signed-off-by: falkTX <falktx@falktx.com>
  • Loading branch information
falkTX committed Mar 23, 2024
1 parent 045b943 commit c1bcae1
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 17 deletions.
90 changes: 76 additions & 14 deletions distrho/DistrhoUtils.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,27 @@ void d_pass() noexcept {}
@{
*/

/*
* Internal noexcept-safe fopen function.
*/
static inline
FILE* __d_fopen(const char* const filename, FILE* const fallback) noexcept
{
if (std::getenv("DPF_CAPTURE_CONSOLE_OUTPUT") == nullptr)
return fallback;

FILE* ret = nullptr;

try {
ret = std::fopen(filename, "a+");
} catch (...) {}

if (ret == nullptr)
ret = fallback;

return ret;
}

/**
Print a string to stdout with newline (gray color).
Does nothing if DEBUG is not defined.
Expand All @@ -119,16 +140,29 @@ void d_pass() noexcept {}
static inline
void d_debug(const char* const fmt, ...) noexcept
{
static FILE* const output = __d_fopen("/tmp/dpf.debug.log", stdout);

try {
va_list args;
va_start(args, fmt);
#ifdef DISTRHO_OS_MAC
std::fprintf(stdout, "\x1b[37;1m");
#else
std::fprintf(stdout, "\x1b[30;1m");
#endif
std::vfprintf(stdout, fmt, args);
std::fprintf(stdout, "\x1b[0m\n");

if (output == stdout)
{
#ifdef DISTRHO_OS_MAC
std::fprintf(output, "\x1b[37;1m[dpf] ");
#else
std::fprintf(output, "\x1b[30;1m[dpf] ");
#endif
std::vfprintf(output, fmt, args);
std::fprintf(output, "\x1b[0m\n");
else
{
std::fprintf(output, "[dpf] ");
std::vfprintf(output, fmt, args);
std::fprintf(output, "\n");
}

std::fflush(output);
va_end(args);
} catch (...) {}
}
Expand All @@ -140,11 +174,18 @@ void d_debug(const char* const fmt, ...) noexcept
static inline
void d_stdout(const char* const fmt, ...) noexcept
{
static FILE* const output = __d_fopen("/tmp/dpf.stdout.log", stdout);

try {
va_list args;
va_start(args, fmt);
std::vfprintf(stdout, fmt, args);
std::fprintf(stdout, "\n");
std::fprintf(output, "[dpf] ");
std::vfprintf(output, fmt, args);
std::fprintf(output, "\n");
#ifndef DEBUG
if (output != stdout)
#endif
std::fflush(output);
va_end(args);
} catch (...) {}
}
Expand All @@ -155,11 +196,18 @@ void d_stdout(const char* const fmt, ...) noexcept
static inline
void d_stderr(const char* const fmt, ...) noexcept
{
static FILE* const output = __d_fopen("/tmp/dpf.stderr.log", stderr);

try {
va_list args;
va_start(args, fmt);
std::vfprintf(stderr, fmt, args);
std::fprintf(stderr, "\n");
std::fprintf(output, "[dpf] ");
std::vfprintf(output, fmt, args);
std::fprintf(output, "\n");
#ifndef DEBUG
if (output != stderr)
#endif
std::fflush(output);
va_end(args);
} catch (...) {}
}
Expand All @@ -170,12 +218,26 @@ void d_stderr(const char* const fmt, ...) noexcept
static inline
void d_stderr2(const char* const fmt, ...) noexcept
{
static FILE* const output = __d_fopen("/tmp/dpf.stderr2.log", stderr);

try {
va_list args;
va_start(args, fmt);
std::fprintf(stderr, "\x1b[31m");
std::vfprintf(stderr, fmt, args);
std::fprintf(stderr, "\x1b[0m\n");

if (output == stdout)
{
std::fprintf(output, "\x1b[31m[dpf] ");
std::vfprintf(output, fmt, args);
std::fprintf(output, "\x1b[0m\n");
}
else
{
std::fprintf(output, "[dpf] ");
std::vfprintf(output, fmt, args);
std::fprintf(output, "\n");
}

std::fflush(output);
va_end(args);
} catch (...) {}
}
Expand Down
2 changes: 1 addition & 1 deletion distrho/src/DistrhoUIDSSI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,7 @@ int main(int argc, char* argv[])

if (argc != 5)
{
fprintf(stderr, "Usage: %s <osc-url> <plugin-dll> <plugin-label> <instance-name>\n", argv[0]);
d_stderr("Usage: %s <osc-url> <plugin-dll> <plugin-label> <instance-name>", argv[0]);
return 1;
}

Expand Down
4 changes: 2 additions & 2 deletions distrho/src/jackbridge/JackBridge.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -475,12 +475,12 @@ struct JackBridge {

if (lib == nullptr)
{
fprintf(stderr, "Failed to load JACK DLL, reason:\n%s\n", lib_error(filename));
d_stderr("Failed to load JACK DLL, reason:\n%s", lib_error(filename));
return;
}
else
{
fprintf(stdout, "%s loaded successfully!\n", filename);
d_stdout("%s loaded successfully!", filename);
}

#define JOIN(a, b) a ## b
Expand Down

0 comments on commit c1bcae1

Please sign in to comment.