-Logger::~Logger() {
- QDateTime date = QDateTime::currentDateTime();
-
- switch (_logLevel) {
- case DebugLevel:
- _buffer.prepend("Debug: ");
- break;
- case InfoLevel:
- _buffer.prepend("Info: ");
- break;
- case WarningLevel:
- _buffer.prepend("Warning: ");
- break;
- case ErrorLevel:
- _buffer.prepend("Error: ");
- break;
- default:
- Q_ASSERT(_logLevel); // There should be no unknown log level
- break;
- }
-#ifndef HAVE_SYSLOG_H
- _buffer.prepend(date.toString("yyyy-MM-dd hh:mm:ss "));
+void Logger::setup(bool keepMessages)
+{
+ _keepMessages = keepMessages;
+
+ // Set maximum level for output (we still store/announce all messages for client-side filtering)
+ if (Quassel::isOptionSet("loglevel")) {
+ QString level = Quassel::optionValue("loglevel").toLower();
+ if (level == "debug")
+ _outputLevel = LogLevel::Debug;
+ else if (level == "info")
+ _outputLevel = LogLevel::Info;
+ else if (level == "warning")
+ _outputLevel = LogLevel::Warning;
+ else if (level == "error")
+ _outputLevel = LogLevel::Error;
+ else {
+ throw ExitException{EXIT_FAILURE, qPrintable(tr("Invalid log level %1; supported are Debug|Info|Warning|Error").arg(level))};
+ }
+ }
+
+ QString logfilename = Quassel::optionValue("logfile");
+ if (!logfilename.isEmpty()) {
+ _logFile.setFileName(logfilename);
+ 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)) {
+ qCritical() << qPrintable(tr("Cannot write to stderr: %1").arg(_logFile.errorString()));
+ }
+ }
+
+#ifdef HAVE_SYSLOG
+ _syslogEnabled = Quassel::isOptionSet("syslog");