X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Flogger.cpp;h=2c601fdbfedf0a9e5dd82ec77daebb1862919692;hp=97afb40d849ded62b8d78ec84e389f12f96092eb;hb=d9026a22f17d5f8b2734cbf0348ad35de5b13f0b;hpb=fcacaaf16551524c7ebb6114254d005274cc3d63 diff --git a/src/common/logger.cpp b/src/common/logger.cpp index 97afb40d..2c601fdb 100644 --- a/src/common/logger.cpp +++ b/src/common/logger.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2018 by the Quassel Project * + * Copyright (C) 2005-2019 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -21,7 +21,7 @@ #include #ifdef HAVE_SYSLOG -# include +# include #endif #include @@ -35,15 +35,14 @@ namespace { -QByteArray msgWithTime(const Logger::LogEntry &msg) +QByteArray msgWithTime(const Logger::LogEntry& msg) { return (msg.timeStamp.toString("yyyy-MM-dd hh:mm:ss ") + msg.message + "\n").toUtf8(); } -} - +} // namespace -Logger::Logger(QObject *parent) +Logger::Logger(QObject* parent) : QObject(parent) { static bool registered = []() { @@ -57,24 +56,21 @@ Logger::Logger(QObject *parent) qInstallMessageHandler(Logger::messageHandler); } - Logger::~Logger() { // If we're not initialized yet, output pending messages so they don't get lost if (!_initialized) { - for (auto &&message : _messages) { + for (auto&& message : _messages) { std::cerr << msgWithTime(message).constData(); } } } - std::vector Logger::messages() const { return _messages; } - void Logger::setup(bool keepMessages) { _keepMessages = keepMessages; @@ -98,24 +94,28 @@ void Logger::setup(bool keepMessages) QString logfilename = Quassel::optionValue("logfile"); if (!logfilename.isEmpty()) { _logFile.setFileName(logfilename); - if (!_logFile.open(QFile::Append|QFile::Unbuffered|QFile::Text)) { + if (!_logFile.open(QFile::Append | QFile::Unbuffered | QFile::Text)) { qCritical() << qPrintable(tr("Could not open log file \"%1\": %2").arg(logfilename, _logFile.errorString())); } } if (!_logFile.isOpen()) { - if (!_logFile.open(stderr, QFile::WriteOnly|QFile::Unbuffered|QFile::Text)) { + if (!_logFile.open(stderr, QFile::WriteOnly | QFile::Unbuffered | QFile::Text)) { qCritical() << qPrintable(tr("Cannot write to stderr: %1").arg(_logFile.errorString())); } } #ifdef HAVE_SYSLOG _syslogEnabled = Quassel::isOptionSet("syslog"); + + // set up options, program name, and facility for later calls to syslog(3) + if (_syslogEnabled) + openlog("quasselcore", LOG_PID, LOG_USER); #endif _initialized = true; // Now that we've setup our logging backends, output pending messages - for (auto &&message : _messages) { + for (auto&& message : _messages) { outputMessage(message); } if (!_keepMessages) { @@ -123,14 +123,12 @@ void Logger::setup(bool keepMessages) } } - -void Logger::messageHandler(QtMsgType type, const QMessageLogContext &, const QString &message) +void Logger::messageHandler(QtMsgType type, const QMessageLogContext&, const QString& message) { Quassel::instance()->logger()->handleMessage(type, message); } - -void Logger::handleMessage(QtMsgType type, const QString &msg) +void Logger::handleMessage(QtMsgType type, const QString& msg) { switch (type) { case QtDebugMsg: @@ -151,35 +149,36 @@ void Logger::handleMessage(QtMsgType type, const QString &msg) } } - -void Logger::handleMessage(LogLevel level, const QString &msg) +void Logger::handleMessage(LogLevel level, const QString& msg) { QString logString; - switch (level) { - case LogLevel::Debug: - logString = "[Debug] "; - break; - case LogLevel::Info: - logString = "[Info ] "; - break; - case LogLevel::Warning: - logString = "[Warn ] "; - break; - case LogLevel::Error: - logString = "[Error] "; - break; - case LogLevel::Fatal: - logString = "[FATAL] "; - break; + // Only add the log level to the message if we do not output to syslog + if (!_syslogEnabled) { + switch (level) { + case LogLevel::Debug: + logString = "[Debug] "; + break; + case LogLevel::Info: + logString = "[Info ] "; + break; + case LogLevel::Warning: + logString = "[Warn ] "; + break; + case LogLevel::Error: + logString = "[Error] "; + break; + case LogLevel::Fatal: + logString = "[FATAL] "; + break; + } } // Use signal connection to make this method thread-safe emit messageLogged({QDateTime::currentDateTime(), level, logString += msg}); } - -void Logger::onMessageLogged(const LogEntry &message) +void Logger::onMessageLogged(const LogEntry& message) { if (_keepMessages) { _messages.push_back(message); @@ -191,8 +190,7 @@ void Logger::onMessageLogged(const LogEntry &message) } } - -void Logger::outputMessage(const LogEntry &message) +void Logger::outputMessage(const LogEntry& message) { if (message.logLevel < _outputLevel) { return; @@ -217,7 +215,7 @@ void Logger::outputMessage(const LogEntry &message) case LogLevel::Fatal: prio = LOG_CRIT; } - syslog(prio|LOG_USER, "%s", qPrintable(message.message)); + syslog(prio, "%s", qPrintable(message.message)); } #endif @@ -235,5 +233,4 @@ void Logger::outputMessage(const LogEntry &message) } } #endif - }