diff --git a/lib/synergy/CApp.cpp b/lib/synergy/CApp.cpp index 84efbb40..493dd8ef 100644 --- a/lib/synergy/CApp.cpp +++ b/lib/synergy/CApp.cpp @@ -43,6 +43,9 @@ s_suspended(false) CApp::~CApp() { delete m_args; + + CLOG->remove(m_fileLog); + delete m_fileLog; } CApp::CArgsBase::CArgsBase() : @@ -294,3 +297,13 @@ CApp::daemonMainLoop(int, const char**) #endif return mainLoop(); } + +void +CApp::setupFileLogging() +{ + if (argsBase().m_logFile != NULL) { + m_fileLog = new CFileLogOutputter(argsBase().m_logFile); + CLOG->insert(m_fileLog); + LOG((CLOG_DEBUG1 "logging to file (%s) enabled", argsBase().m_logFile)); + } +} diff --git a/lib/synergy/CApp.h b/lib/synergy/CApp.h index f7ccb1bd..4703bf73 100644 --- a/lib/synergy/CApp.h +++ b/lib/synergy/CApp.h @@ -20,6 +20,7 @@ class IArchTaskBarReceiver; class CBufferedLogOutputter; class ILogOutputter; +class CFileLogOutputter; typedef IArchTaskBarReceiver* (*CreateTaskBarReceiverFunc)(const CBufferedLogOutputter*); typedef int (*StartupFunc)(int, char**); @@ -90,6 +91,9 @@ public: bool s_suspended; IArchTaskBarReceiver* s_taskBarReceiver; + // If --log was specified in args, then add a file logger. + void setupFileLogging(); + protected: virtual void parseArgs(int argc, const char* const* argv, int &i); virtual bool parseArg(const int& argc, const char* const* argv, int& i); @@ -97,6 +101,7 @@ protected: private: CArgsBase* m_args; static CApp* s_instance; + CFileLogOutputter* m_fileLog; }; #define BYE "\nTry `%s --help' for more information." diff --git a/lib/synergy/CClientApp.cpp b/lib/synergy/CClientApp.cpp index bb332891..ad1fedc8 100644 --- a/lib/synergy/CClientApp.cpp +++ b/lib/synergy/CClientApp.cpp @@ -491,13 +491,7 @@ CClientApp::mainLoop() // logging to files CFileLogOutputter* fileLog = NULL; - if (args().m_logFile != NULL) { - fileLog = new CFileLogOutputter(args().m_logFile); - - CLOG->insert(fileLog); - - LOG((CLOG_DEBUG1 "Logging to file (%s) enabled", args().m_logFile)); - } + setupFileLogging(); // create socket multiplexer. this must happen after daemonization // on unix because threads evaporate across a fork(). @@ -532,11 +526,6 @@ CClientApp::mainLoop() updateStatus(); LOG((CLOG_NOTE "stopped client")); - if (fileLog) { - CLOG->remove(fileLog); - delete fileLog; - } - return kExitSuccess; } diff --git a/lib/synergy/CServerApp.cpp b/lib/synergy/CServerApp.cpp index 65610b14..1998b1f5 100644 --- a/lib/synergy/CServerApp.cpp +++ b/lib/synergy/CServerApp.cpp @@ -728,16 +728,7 @@ int CServerApp::mainLoop() // create the event queue CEventQueue eventQueue; - // logging to files - CFileLogOutputter* fileLog = NULL; - - if (args().m_logFile != NULL) { - fileLog = new CFileLogOutputter(args().m_logFile); - - CLOG->insert(fileLog); - - LOG((CLOG_DEBUG1 "Logging to file (%s) enabled", args().m_logFile)); - } + setupFileLogging(); // if configuration has no screens then add this system // as the default @@ -810,11 +801,6 @@ int CServerApp::mainLoop() updateStatus(); LOG((CLOG_NOTE "stopped server")); - if (fileLog) { - CLOG->remove(fileLog); - delete fileLog; - } - return kExitSuccess; }