X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Flogger.cpp;h=17c473b5a1643052606524e79d04c979c4a97890;hp=2bc2d2789ffd166acd2734ed0ee429b0ebb64235;hb=4c83963b1d77f4c2dbae606876be0eee59f53dae;hpb=d6b056e936ec441258d291b7a8af7b83f9f53016 diff --git a/src/common/logger.cpp b/src/common/logger.cpp index 2bc2d278..17c473b5 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 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -19,32 +19,61 @@ ***************************************************************************/ #include "logger.h" +#include "quassel.h" -#include - - +#include +#include +#include Logger::~Logger() { - //qInstallMsgHandler(0); + QDateTime date = QDateTime::currentDateTime(); + if(_logLevel == DebugLevel) _buffer.prepend("Debug: "); + else if (_logLevel == InfoLevel) _buffer.prepend("Info: "); + else if (_logLevel == WarningLevel) _buffer.prepend("Warning: "); + else if (_logLevel == ErrorLevel) _buffer.prepend("Error: "); + _buffer.prepend(date.toString("yyyy-MM-dd hh:mm:ss ")); + log(); } -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 (Quassel::optionValue("loglevel") == "Debug") lvl = DebugLevel; + else if (Quassel::optionValue("loglevel") == "Info") lvl = InfoLevel; + else if (Quassel::optionValue("loglevel") == "Warning") lvl = WarningLevel; + else if (Quassel::optionValue("loglevel") == "Error") lvl = ErrorLevel; + else lvl = InfoLevel; + + if(_logLevel < lvl) return; + + // if we can't open logfile we log to stdout + QTextStream out(stdout); + QFile file; + if(!Quassel::optionValue("logfile").isEmpty()) { + file.setFileName(Quassel::optionValue("logfile")); + if (file.open(QIODevice::Append | QIODevice::Text)) { + out.setDevice(&file); + _buffer.remove(QChar('\n')); + } } + out << _buffer << endl; + if(file.isOpen()) file.close(); } -Logger::Logger() { - //qInstallMsgHandler(messageHandler); + +void Logger::logMessage(QtMsgType type, const char *msg) { + switch (type) { + case QtDebugMsg: + Logger(Logger::DebugLevel) << msg; + break; + case QtWarningMsg: + Logger(Logger::WarningLevel) << msg; + break; + case QtCriticalMsg: + Logger(Logger::ErrorLevel) << msg; + break; + case QtFatalMsg: + Logger(Logger::ErrorLevel) << msg; + Quassel::logFatalMessage(msg); + return; + } }