Reopen debug.log on SIGHUP
The best log rotation method formerly available was to configure logrotate with the copytruncate option. As described in the logrotate documentation, "there is a very small time slice between copying the file and truncating it, so some logging data might be lost". By sending SIGHUP to the server process, one can now reopen the debug log file without losing any data.
This commit is contained in:
parent
fea25712ca
commit
9af080c351
12
src/init.cpp
12
src/init.cpp
@ -80,6 +80,10 @@ void HandleSIGTERM(int)
|
||||
fRequestShutdown = true;
|
||||
}
|
||||
|
||||
void HandleSIGHUP(int)
|
||||
{
|
||||
fReopenDebugLog = true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -285,7 +289,13 @@ bool AppInit2()
|
||||
sa.sa_flags = 0;
|
||||
sigaction(SIGTERM, &sa, NULL);
|
||||
sigaction(SIGINT, &sa, NULL);
|
||||
sigaction(SIGHUP, &sa, NULL);
|
||||
|
||||
// Reopen debug.log on SIGHUP
|
||||
struct sigaction sa_hup;
|
||||
sa_hup.sa_handler = HandleSIGHUP;
|
||||
sigemptyset(&sa_hup.sa_mask);
|
||||
sa_hup.sa_flags = 0;
|
||||
sigaction(SIGHUP, &sa_hup, NULL);
|
||||
#endif
|
||||
|
||||
fTestNet = GetBoolArg("-testnet");
|
||||
|
@ -70,6 +70,7 @@ bool fTestNet = false;
|
||||
bool fNoListen = false;
|
||||
bool fLogTimestamps = false;
|
||||
CMedianFilter<int64> vTimeOffsets(200,0);
|
||||
bool fReopenDebugLog = false;
|
||||
|
||||
// Init openssl library multithreading support
|
||||
static CCriticalSection** ppmutexOpenSSL;
|
||||
@ -213,6 +214,14 @@ inline int OutputDebugStringF(const char* pszFormat, ...)
|
||||
static boost::mutex mutexDebugLog;
|
||||
boost::mutex::scoped_lock scoped_lock(mutexDebugLog);
|
||||
|
||||
// reopen the log file, if requested
|
||||
if (fReopenDebugLog) {
|
||||
fReopenDebugLog = false;
|
||||
boost::filesystem::path pathDebug = GetDataDir() / "debug.log";
|
||||
if (freopen(pathDebug.string().c_str(),"a",fileout) != NULL)
|
||||
setbuf(fileout, NULL); // unbuffered
|
||||
}
|
||||
|
||||
// Debug print useful for profiling
|
||||
if (fLogTimestamps && fStartedNewLine)
|
||||
fprintf(fileout, "%s ", DateTimeStrFormat("%x %H:%M:%S", GetTime()).c_str());
|
||||
|
@ -121,6 +121,7 @@ extern std::string strMiscWarning;
|
||||
extern bool fTestNet;
|
||||
extern bool fNoListen;
|
||||
extern bool fLogTimestamps;
|
||||
extern bool fReopenDebugLog;
|
||||
|
||||
void RandAddSeed();
|
||||
void RandAddSeedPerfmon();
|
||||
|
Loading…
Reference in New Issue
Block a user