X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Flogger.cpp;h=78a3610c82b2116f331f1c29e79e824e9fd1c9e3;hp=76fa916ec11b6bb57298de6c90f2ff1e9aeb6c97;hb=245a92b091b754bfdb8a5d6bd4da470ead5aaa29;hpb=0ac9ce4d7cf768d13993d6aa1d6b791c4149a843 diff --git a/src/common/logger.cpp b/src/common/logger.cpp index 76fa916e..78a3610c 100644 --- a/src/common/logger.cpp +++ b/src/common/logger.cpp @@ -1,11 +1,11 @@ /*************************************************************************** - * Copyright (C) 2005 by The Quassel Team * + * Copyright (C) 2005-2012 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * + * (at your option) version 3. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * @@ -18,33 +18,97 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#include "logger.h" - -#include +#include +#include +#include +#ifdef HAVE_SYSLOG +# include +#endif +#include "logger.h" +#include "quassel.h" Logger::~Logger() { - //qInstallMsgHandler(0); + log(); } -void messageHandler(QtMsgType type, const char *msg) { - switch (type) { - case QtDebugMsg: - std::cerr << "[DEBUG] " << msg << "\n"; +void Logger::log() { + if(_logLevel < Quassel::logLevel()) + return; + + 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 QtWarningMsg: - std::cerr << "[WARNING] " << msg << "\n"; + case Quassel::ErrorLevel: + prio = LOG_ERR; break; - case QtCriticalMsg: - std::cerr << "[CRITICAL] " << msg << "\n"; + default: + prio = LOG_INFO; break; - case QtFatalMsg: - std::cerr << "[FATAL] " << msg << "\n"; - abort(); // deliberately core dump + } + syslog(LOG_USER & prio, "%s", qPrintable(_buffer)); } + // don't log to stdout if --syslog was specified (but neither ignore --logfile) + if(!Quassel::logFile()) + return; +#endif + + _buffer.prepend(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ")); + + // if we don't have a logfile we log to stdout + + QTextStream out(stdout); + if(Quassel::logFile() && Quassel::logFile()->isOpen()) { + _buffer.remove(QChar('\n')); + out.setDevice(Quassel::logFile()); + } + + out << _buffer << endl; } -Logger::Logger() { - //qInstallMsgHandler(messageHandler); + +void Logger::logMessage(QtMsgType type, const char *msg) { + switch (type) { + case QtDebugMsg: + Logger(Quassel::DebugLevel) << msg; + break; + case QtWarningMsg: + Logger(Quassel::WarningLevel) << msg; + break; + case QtCriticalMsg: + Logger(Quassel::ErrorLevel) << msg; + break; + case QtFatalMsg: + Logger(Quassel::ErrorLevel) << msg; + Quassel::logFatalMessage(msg); + return; + } }