Add `-debuglogfile` option
This patch adds an option to configure the name and/or directory of the debug log. The user can specify either a relative path, in which case the path is relative to the data directory. They can also specify an absolute path to put the log anywhere else in the file system.
This commit is contained in:
parent
68d25c9259
commit
540cdb34e2
|
@ -355,6 +355,7 @@ std::string HelpMessage(HelpMessageMode mode)
|
|||
strUsage += HelpMessageOpt("-exportdir=<dir>", _("Specify directory to be used when exporting data"));
|
||||
strUsage += HelpMessageOpt("-dbcache=<n>", strprintf(_("Set database cache size in megabytes (%d to %d, default: %d)"), nMinDbCache, nMaxDbCache, nDefaultDbCache));
|
||||
strUsage += HelpMessageOpt("-loadblock=<file>", _("Imports blocks from external blk000??.dat file on startup"));
|
||||
strUsage += HelpMessageOpt("-debuglogfile=<file>", strprintf(_("Specify location of debug log file: this can be an absolute path or a path relative to the data directory (default: %s)"), DEFAULT_DEBUGLOGFILE));
|
||||
strUsage += HelpMessageOpt("-maxorphantx=<n>", strprintf(_("Keep at most <n> unconnectable transactions in memory (default: %u)"), DEFAULT_MAX_ORPHAN_TRANSACTIONS));
|
||||
strUsage += HelpMessageOpt("-par=<n>", strprintf(_("Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d)"),
|
||||
-GetNumCores(), MAX_SCRIPTCHECK_THREADS, DEFAULT_SCRIPTCHECK_THREADS));
|
||||
|
@ -1127,8 +1128,11 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
|
|||
// if (GetBoolArg("-shrinkdebugfile", !fDebug))
|
||||
// ShrinkDebugFile();
|
||||
|
||||
if (fPrintToDebugLog)
|
||||
OpenDebugLog();
|
||||
if (fPrintToDebugLog) {
|
||||
if (!OpenDebugLog()) {
|
||||
return InitError(strprintf("Could not open debug log file %s", GetDebugLogPath().string()));
|
||||
}
|
||||
}
|
||||
|
||||
LogPrintf("Using OpenSSL version %s\n", SSLeay_version(SSLEAY_VERSION));
|
||||
#ifdef ENABLE_WALLET
|
||||
|
|
28
src/util.cpp
28
src/util.cpp
|
@ -102,6 +102,7 @@ using namespace std;
|
|||
|
||||
const char * const BITCOIN_CONF_FILENAME = "zcash.conf";
|
||||
const char * const BITCOIN_PID_FILENAME = "zcashd.pid";
|
||||
const char * const DEFAULT_DEBUGLOGFILE = "debug.log";
|
||||
|
||||
map<string, string> mapArgs;
|
||||
map<string, vector<string> > mapMultiArgs;
|
||||
|
@ -210,17 +211,31 @@ static void DebugPrintInit()
|
|||
vMsgsBeforeOpenLog = new list<string>;
|
||||
}
|
||||
|
||||
void OpenDebugLog()
|
||||
boost::filesystem::path GetDebugLogPath()
|
||||
{
|
||||
boost::filesystem::path logfile(GetArg("-debuglogfile", DEFAULT_DEBUGLOGFILE));
|
||||
if (logfile.is_absolute()) {
|
||||
return logfile;
|
||||
} else {
|
||||
return GetDataDir() / logfile;
|
||||
}
|
||||
}
|
||||
|
||||
bool OpenDebugLog()
|
||||
{
|
||||
boost::call_once(&DebugPrintInit, debugPrintInitFlag);
|
||||
boost::mutex::scoped_lock scoped_lock(*mutexDebugLog);
|
||||
|
||||
assert(fileout == NULL);
|
||||
assert(vMsgsBeforeOpenLog);
|
||||
boost::filesystem::path pathDebug = GetDataDir() / "debug.log";
|
||||
fileout = fopen(pathDebug.string().c_str(), "a");
|
||||
if (fileout) setbuf(fileout, NULL); // unbuffered
|
||||
|
||||
boost::filesystem::path pathDebug = GetDebugLogPath();
|
||||
fileout = fopen(pathDebug.string().c_str(), "a");
|
||||
if (!fileout) {
|
||||
return false;
|
||||
}
|
||||
|
||||
setbuf(fileout, nullptr); // unbuffered
|
||||
// dump buffered messages from before we opened the log
|
||||
while (!vMsgsBeforeOpenLog->empty()) {
|
||||
FileWriteStr(vMsgsBeforeOpenLog->front(), fileout);
|
||||
|
@ -229,6 +244,7 @@ void OpenDebugLog()
|
|||
|
||||
delete vMsgsBeforeOpenLog;
|
||||
vMsgsBeforeOpenLog = NULL;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool LogAcceptCategory(const char* category)
|
||||
|
@ -313,7 +329,7 @@ int LogPrintStr(const std::string &str)
|
|||
// reopen the log file, if requested
|
||||
if (fReopenDebugLog) {
|
||||
fReopenDebugLog = false;
|
||||
boost::filesystem::path pathDebug = GetDataDir() / "debug.log";
|
||||
boost::filesystem::path pathDebug = GetDebugLogPath();
|
||||
if (freopen(pathDebug.string().c_str(),"a",fileout) != NULL)
|
||||
setbuf(fileout, NULL); // unbuffered
|
||||
}
|
||||
|
@ -771,7 +787,7 @@ void AllocateFileRange(FILE *file, unsigned int offset, unsigned int length) {
|
|||
void ShrinkDebugFile()
|
||||
{
|
||||
// Scroll debug.log if it's getting too big
|
||||
boost::filesystem::path pathLog = GetDataDir() / "debug.log";
|
||||
boost::filesystem::path pathLog = GetDebugLogPath();
|
||||
FILE* file = fopen(pathLog.string().c_str(), "r");
|
||||
if (file && boost::filesystem::file_size(pathLog) > 10 * 1000000)
|
||||
{
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
static const bool DEFAULT_LOGTIMEMICROS = false;
|
||||
static const bool DEFAULT_LOGIPS = false;
|
||||
static const bool DEFAULT_LOGTIMESTAMPS = true;
|
||||
extern const char * const DEFAULT_DEBUGLOGFILE;
|
||||
|
||||
/** Signals for translation. */
|
||||
class CTranslationInterface
|
||||
|
@ -142,7 +143,8 @@ void ReadConfigFile(const std::string& confPath, std::map<std::string, std::stri
|
|||
boost::filesystem::path GetSpecialFolderPath(int nFolder, bool fCreate = true);
|
||||
#endif
|
||||
boost::filesystem::path GetTempPath();
|
||||
void OpenDebugLog();
|
||||
boost::filesystem::path GetDebugLogPath();
|
||||
bool OpenDebugLog();
|
||||
void ShrinkDebugFile();
|
||||
void runCommand(const std::string& strCommand);
|
||||
const boost::filesystem::path GetExportDir();
|
||||
|
|
Loading…
Reference in New Issue