From e2625c35de1b7f1d065a1f4708ae6bdee4c92013 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Wed, 17 Nov 2010 10:28:35 +0000 Subject: Add log file logging to all daemons. --- lib/server/Daemon.cpp | 84 +++++++++++++++++++++++++++++++++------------------ lib/server/Daemon.h | 3 ++ 2 files changed, 57 insertions(+), 30 deletions(-) (limited to 'lib/server') diff --git a/lib/server/Daemon.cpp b/lib/server/Daemon.cpp index 4888767a..e2df8a56 100644 --- a/lib/server/Daemon.cpp +++ b/lib/server/Daemon.cpp @@ -121,18 +121,19 @@ void Daemon::Usage() " -F Do not fork into background, but fork to serve multiple clients\n" #endif " -k Keep console open after fork, keep writing log messages to it\n" -#ifndef WIN32 " -K Stop writing log messages to console while daemon is running\n" + " -o Log to a file, defaults to maximum verbosity\n" + " -O Set file log verbosity to error/warning/notice/info/trace/everything\n" " -P Show process ID (PID) in console output\n" -#endif " -q Run more quietly, reduce verbosity level by one, can repeat\n" - " -Q Run at minimum verbosity, log nothing\n" - " -v Run more verbosely, increase verbosity level by one, can repeat\n" - " -V Run at maximum verbosity, log everything\n" - " -W Set verbosity to error/warning/notice/info/trace/everything\n" + " -Q Run at minimum verbosity, log nothing to console and system\n" " -t Tag console output with specified marker\n" " -T Timestamp console output\n" - " -U Timestamp console output with microseconds\n"; + " -U Timestamp console output with microseconds\n" + " -v Run more verbosely, increase verbosity level by one, can repeat\n" + " -V Run at maximum verbosity, log everything to console and sysystem\n" + " -W Set verbosity to error/warning/notice/info/trace/everything\n" + ; } // -------------------------------------------------------------------------- @@ -171,6 +172,13 @@ int Daemon::ProcessOption(signed int option) break; #endif // !WIN32 + case 'h': + { + Usage(); + return 2; + } + break; + case 'k': { mKeepConsoleOpenAfterFork = true; @@ -183,10 +191,21 @@ int Daemon::ProcessOption(signed int option) } break; - case 'h': + case 'o': { - Usage(); - return 2; + mLogFile = optarg; + mLogFileLevel = Log::EVERYTHING; + } + break; + + case 'O': + { + mLogFileLevel = Logging::GetNamedLevel(optarg); + if (mLogFileLevel == Log::INVALID) + { + BOX_FATAL("Invalid logging level: " << optarg); + return 2; + } } break; @@ -215,6 +234,25 @@ int Daemon::ProcessOption(signed int option) } break; + case 't': + { + Logging::SetProgramName(optarg); + Console::SetShowTag(true); + } + break; + + case 'T': + { + Console::SetShowTime(true); + } + break; + + case 'U': + { + Console::SetShowTime(true); + Console::SetShowTimeMicros(true); + } + break; case 'v': { @@ -246,26 +284,6 @@ int Daemon::ProcessOption(signed int option) } break; - case 't': - { - Logging::SetProgramName(optarg); - Console::SetShowTag(true); - } - break; - - case 'T': - { - Console::SetShowTime(true); - } - break; - - case 'U': - { - Console::SetShowTime(true); - Console::SetShowTimeMicros(true); - } - break; - case '?': { BOX_FATAL("Unknown option on command line: " @@ -360,6 +378,12 @@ int Daemon::Main(const std::string& rDefaultConfigFile, int argc, Logging::FilterConsole((Log::Level)mLogLevel); Logging::FilterSyslog ((Log::Level)mLogLevel); + if (mLogFileLevel != Log::INVALID) + { + mapLogFileLogger.reset( + new FileLogger(mLogFile, mLogFileLevel)); + } + return Main(mConfigFileName); } diff --git a/lib/server/Daemon.h b/lib/server/Daemon.h index 82532366..6e55be3b 100644 --- a/lib/server/Daemon.h +++ b/lib/server/Daemon.h @@ -99,6 +99,9 @@ private: bool mKeepConsoleOpenAfterFork; bool mHaveConfigFile; int mLogLevel; // need an int to do math with + std::string mLogFile; + Log::Level mLogFileLevel; + std::auto_ptr mapLogFileLogger; static Daemon *spDaemon; std::string mAppName; }; -- cgit v1.2.3