X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Flogger.cpp;h=5d7c64a3f285e7409865160fe12e92fbebec8c7a;hp=6047042c5dcc7a0e6fe82f5f1659135494ed5d97;hb=6b75ac568098c17de5f0a98ce0d96781b86e98b3;hpb=b49131fcb4ec65ead52fc061c5be2f160a8be3cf diff --git a/src/common/logger.cpp b/src/common/logger.cpp index 6047042c..5d7c64a3 100644 --- a/src/common/logger.cpp +++ b/src/common/logger.cpp @@ -19,31 +19,43 @@ ***************************************************************************/ #include "logger.h" +#include "global.h" -#include -#include +#include +#include +#include Logger::~Logger() { - qInstallMsgHandler(0); + QDateTime date = QDateTime::currentDateTime(); + if(stream->logLevel == DebugLevel) stream->buffer.prepend("Debug: "); + else if (stream->logLevel == InfoLevel) stream->buffer.prepend("Info: "); + else if (stream->logLevel == WarningLevel) stream->buffer.prepend("Warning: "); + else if (stream->logLevel == ErrorLevel) stream->buffer.prepend("Error: "); + stream->buffer.prepend(date.toString("yyyy-MM-dd hh:mm:ss ")); + log(); + delete stream; } -void messageHandler(QtMsgType type, const char *msg) { - switch (type) { - case QtDebugMsg: - std::cerr << "[DEBUG] " << msg << "\n"; - break; - case QtWarningMsg: - std::cerr << "[WARNING] " << msg << "\n"; - break; - case QtCriticalMsg: - std::cerr << "[CRITICAL] " << msg << "\n"; - break; - case QtFatalMsg: - std::cerr << "[FATAL] " << msg << "\n"; - abort(); // deliberately core dump - } -} +void Logger::log() { + LogLevel lvl; + if (Global::parser.value("loglevel") == "Debug") lvl = DebugLevel; + else if (Global::parser.value("loglevel") == "Info") lvl = InfoLevel; + else if (Global::parser.value("loglevel") == "Warning") lvl = WarningLevel; + else if (Global::parser.value("loglevel") == "Error") lvl = ErrorLevel; + else lvl = InfoLevel; -Logger::Logger() { - qInstallMsgHandler(messageHandler); + if(stream->logLevel < lvl) return; + + // if we can't open logfile we log to stdout + QTextStream out(stdout); + QFile file; + if(!Global::parser.value("logfile").isEmpty()) { + file.setFileName(Global::parser.value("logfile")); + if (file.open(QIODevice::Append | QIODevice::Text)) { + out.setDevice(&file); + stream->buffer.remove(QChar('\n')); + } + } + out << stream->buffer << "\n"; + if(file.isOpen()) file.close(); }