X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Flogger.cpp;h=d4d676ced05dab9d9938b5dc07fff0083689f55c;hp=2bc2d2789ffd166acd2734ed0ee429b0ebb64235;hb=3156b80615b3783bde9399d0925c745fe3af262e;hpb=d6b056e936ec441258d291b7a8af7b83f9f53016 diff --git a/src/common/logger.cpp b/src/common/logger.cpp index 2bc2d278..d4d676ce 100644 --- a/src/common/logger.cpp +++ b/src/common/logger.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005 by the Quassel IRC Team * + * Copyright (C) 2005-2014 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -15,36 +15,103 @@ * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ +#include +#include +#include + +#ifdef HAVE_SYSLOG +# include +#endif + #include "logger.h" +#include "quassel.h" + +Logger::~Logger() +{ + log(); +} + + +void Logger::log() +{ + if (_logLevel < Quassel::logLevel()) + return; -#include + switch (_logLevel) { + case Quassel::DebugLevel: + _buffer.prepend("Debug: "); + break; + case Quassel::InfoLevel: + _buffer.prepend("Info: "); + break; + case Quassel::WarningLevel: + _buffer.prepend("Warning: "); + break; + case Quassel::ErrorLevel: + _buffer.prepend("Error: "); + break; + default: + break; + } +#ifdef HAVE_SYSLOG + if (Quassel::logToSyslog()) { + int prio; + switch (_logLevel) { + case Quassel::DebugLevel: + prio = LOG_DEBUG; + break; + case Quassel::InfoLevel: + prio = LOG_INFO; + break; + case Quassel::WarningLevel: + prio = LOG_WARNING; + break; + case Quassel::ErrorLevel: + prio = LOG_ERR; + break; + default: + prio = LOG_INFO; + break; + } + syslog(LOG_USER & prio, "%s", qPrintable(_buffer)); + } +#endif + // if we neither use syslog nor have a logfile we log to stdout -Logger::~Logger() { - //qInstallMsgHandler(0); + if (Quassel::logFile() || !Quassel::logToSyslog()) { + _buffer.prepend(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ")); + + QTextStream out(stdout); + if (Quassel::logFile() && Quassel::logFile()->isOpen()) { + _buffer.remove(QChar('\n')); + out.setDevice(Quassel::logFile()); + } + + out << _buffer << endl; + } } -void messageHandler(QtMsgType type, const char *msg) { - switch (type) { + +void Logger::logMessage(QtMsgType type, const char *msg) +{ + switch (type) { case QtDebugMsg: - std::cerr << "[DEBUG] " << msg << "\n"; - break; + Logger(Quassel::DebugLevel) << msg; + break; case QtWarningMsg: - std::cerr << "[WARNING] " << msg << "\n"; - break; + Logger(Quassel::WarningLevel) << msg; + break; case QtCriticalMsg: - std::cerr << "[CRITICAL] " << msg << "\n"; - break; + Logger(Quassel::ErrorLevel) << msg; + break; case QtFatalMsg: - std::cerr << "[FATAL] " << msg << "\n"; - abort(); // deliberately core dump - } -} - -Logger::Logger() { - //qInstallMsgHandler(messageHandler); + Logger(Quassel::ErrorLevel) << msg; + Quassel::logFatalMessage(msg); + return; + } }