Browse Source

Redirect stdout and stderr to the log file so crashing libraries will log

absolutely everything.
tags/v2.0.0
Andrew Belt 5 years ago
parent
commit
19bf21aa4b
2 changed files with 7 additions and 2 deletions
  1. +0
    -1
      src/asset.cpp
  2. +7
    -1
      src/logger.cpp

+ 0
- 1
src/asset.cpp View File

@@ -116,7 +116,6 @@ void init() {
initSystemDir(); initSystemDir();
initUserDir(); initUserDir();


system::createDirectory(systemDir);
system::createDirectory(userDir); system::createDirectory(userDir);


// Set paths // Set paths


+ 7
- 1
src/logger.cpp View File

@@ -4,6 +4,7 @@
#include <asset.hpp> #include <asset.hpp>
#include <settings.hpp> #include <settings.hpp>
#include <system.hpp> #include <system.hpp>
#include <unistd.h> // for dup2




namespace rack { namespace rack {
@@ -17,6 +18,7 @@ static std::mutex logMutex;


void init() { void init() {
startTime = system::getNanoseconds(); startTime = system::getNanoseconds();
// Don't open a file in development mode.
if (settings::devMode) { if (settings::devMode) {
outputFile = stderr; outputFile = stderr;
return; return;
@@ -27,6 +29,10 @@ void init() {
if (!outputFile) { if (!outputFile) {
std::fprintf(stderr, "Could not open log at %s\n", asset::logPath.c_str()); std::fprintf(stderr, "Could not open log at %s\n", asset::logPath.c_str());
} }

// Redirect stdout and stderr to the file
dup2(fileno(outputFile), fileno(stdout));
dup2(fileno(outputFile), fileno(stderr));
} }


void destroy() { void destroy() {
@@ -77,7 +83,7 @@ void log(Level level, const char* filename, int line, const char* func, const ch
} }


static bool fileEndsWith(FILE* file, std::string str) { static bool fileEndsWith(FILE* file, std::string str) {
// Seek to last 3 characters
// Seek to last `len` characters
size_t len = str.size(); size_t len = str.size();
std::fseek(file, -long(len), SEEK_END); std::fseek(file, -long(len), SEEK_END);
char actual[len]; char actual[len];


Loading…
Cancel
Save