mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-08-12 00:00:44 -04:00
-added Log feature for QT .
-fixed Prefences and General Dialog -disabled show function from main.cpp it will not allow to start minimized, it blocks minimize gui function. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@686 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
8b9e64f9f6
commit
cb891ff08a
29 changed files with 961 additions and 1063 deletions
181
retroshare-gui/src/util/log.cpp
Normal file
181
retroshare-gui/src/util/log.cpp
Normal file
|
@ -0,0 +1,181 @@
|
|||
/****************************************************************
|
||||
* This file is distributed under the following license:
|
||||
*
|
||||
* Copyright (c) 2008, crypton
|
||||
* Copyright (c) 2008, Matt Edman, Justin Hipple
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
****************************************************************/
|
||||
|
||||
#include <QDateTime>
|
||||
#include <QTextStream>
|
||||
|
||||
#include "log.h"
|
||||
|
||||
/** Open log files for appending as write-only text. */
|
||||
#define LOGFILE_MODE \
|
||||
(QIODevice::WriteOnly|QIODevice::Append|QIODevice::Text)
|
||||
/** Format for log message timestamps. */
|
||||
#define TIMESTAMP_FMT "MMM dd HH:mm:ss.zzz"
|
||||
|
||||
|
||||
/** Default constructor. Logs at level Notice by default. */
|
||||
Log::Log()
|
||||
{
|
||||
_logLevel = Notice;
|
||||
}
|
||||
|
||||
/** Destructor. Closes the log file. */
|
||||
Log::~Log()
|
||||
{
|
||||
close();
|
||||
}
|
||||
|
||||
/** Returns a list of strings representing available log levels. */
|
||||
QStringList
|
||||
Log::logLevels()
|
||||
{
|
||||
return (QStringList() << "debug" << "info" << "notice"
|
||||
<< "warn" << "error");
|
||||
}
|
||||
|
||||
/** Sets the current log level to <b>level</b>. If <b>level</b> is Off, then
|
||||
* the log file will be closed as well. If <b>level</b> is Unknown, no change
|
||||
* to the current log level is made. */
|
||||
void
|
||||
Log::setLogLevel(LogLevel level)
|
||||
{
|
||||
if (level >= Debug && level < Unknown)
|
||||
_logLevel = level;
|
||||
if (level == Off)
|
||||
_logFile.close();
|
||||
}
|
||||
|
||||
/** Opens <b>file</b> for appending, to which log messages will be written. */
|
||||
bool
|
||||
Log::open(FILE *file)
|
||||
{
|
||||
if (_logFile.isOpen())
|
||||
close();
|
||||
|
||||
_logFile.open(file, LOGFILE_MODE);
|
||||
return isOpen();
|
||||
}
|
||||
|
||||
/** Opens <b>file</b> for appending, to which log messages will be written. */
|
||||
bool
|
||||
Log::open(QString file)
|
||||
{
|
||||
if (_logFile.isOpen())
|
||||
close();
|
||||
|
||||
_logFile.setFileName(file);
|
||||
_logFile.open(LOGFILE_MODE);
|
||||
return isOpen();
|
||||
}
|
||||
|
||||
/** Flushes any outstanding log messages and closes the log file. */
|
||||
void
|
||||
Log::close()
|
||||
{
|
||||
if (_logFile.isOpen()) {
|
||||
_logFile.flush();
|
||||
_logFile.close();
|
||||
}
|
||||
}
|
||||
|
||||
/** Creates a log message with severity <b>level</b> and initial message
|
||||
* contents <b>message</b>. The log message can be appended to until the
|
||||
* returned LogMessage's destructor is called, at which point the complete
|
||||
* message is written to the log file. */
|
||||
inline Log::LogMessage
|
||||
Log::log(LogLevel level)
|
||||
{
|
||||
if (level < _logLevel)
|
||||
return LogMessage(level, 0);
|
||||
return LogMessage(level, &_logFile);
|
||||
}
|
||||
|
||||
/** Creates a log message with severity <b>level</b>. The log message can be
|
||||
* appended to until the returned LogMessage's destructor is called, at
|
||||
* which point the complete message is written to the log file. */
|
||||
Log::LogMessage
|
||||
Log::log(LogLevel level, QString msg)
|
||||
{
|
||||
return log(level) << msg;
|
||||
}
|
||||
|
||||
/** Returns a string description of the given LogLevel <b>level</b>. */
|
||||
inline QString
|
||||
Log::logLevelToString(LogLevel level)
|
||||
{
|
||||
switch (level) {
|
||||
case Debug: return "debug";
|
||||
case Info: return "info";
|
||||
case Notice: return "notice";
|
||||
case Warn: return "warn";
|
||||
case Error: return "error";
|
||||
case Off: return "off";
|
||||
default: return "unknown";
|
||||
}
|
||||
}
|
||||
|
||||
/** Returns a LogLevel for the level given by <b>str</b>, or Unknown if the
|
||||
* given string does not represent a valid LogLevel value. */
|
||||
Log::LogLevel
|
||||
Log::stringToLogLevel(QString str)
|
||||
{
|
||||
str = str.toLower();
|
||||
if (str == "debug")
|
||||
return Debug;
|
||||
else if (str == "info")
|
||||
return Info;
|
||||
else if (str == "notice")
|
||||
return Notice;
|
||||
else if (str == "warn")
|
||||
return Warn;
|
||||
else if (str == "error")
|
||||
return Error;
|
||||
else if (str == "off")
|
||||
return Off;
|
||||
return Unknown;
|
||||
}
|
||||
|
||||
/** Returns a formatted log message, prefixed with a timestamp and the log
|
||||
* message severity level. */
|
||||
inline QString
|
||||
Log::LogMessage::toString() const
|
||||
{
|
||||
QString msg = QDateTime::currentDateTime().toString(TIMESTAMP_FMT);
|
||||
msg.append(" [" + Log::logLevelToString(stream->type) + "] ");
|
||||
msg.append(stream->buf);
|
||||
return msg;
|
||||
}
|
||||
|
||||
/** Destructor. Writes the buffered log message out to the log file specified
|
||||
* in the constructor. */
|
||||
Log::LogMessage::~LogMessage()
|
||||
{
|
||||
if (!--stream->ref) {
|
||||
if (stream->out && !stream->buf.isEmpty()) {
|
||||
QTextStream log(stream->out);
|
||||
log << toString() << endl;
|
||||
log.flush();
|
||||
}
|
||||
delete stream;
|
||||
}
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue