1 /*
2  * Stellarium
3  * Copyright (C) 2009 Fabien Chereau
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA  02110-1335, USA.
18  */
19 
20 #ifndef STELLOGGER_HPP
21 #define STELLOGGER_HPP
22 
23 #include <QString>
24 #include <QFile>
25 #include <QMutex>
26 
27 //! @class StelLogger
28 //! Class wit only static members used to manage logging for Stellarium.
29 //! The debugLogHandler() method allow to defined it as a standard Qt messages handler
30 //! which is then used by qDebug, qWarning and qFatal.
31 class StelLogger
32 {
33 public:
34 	//! Create and initialize the log file.
35 	//! Prepend system information before any debugging output.
36 	static void init(const QString& logFilePath);
37 
38 	//! Deinitialize the log file.
39 	//! Must be called after init() was called.
40 	static void deinit();
41 
42 	//! Handler for qDebug() and friends. Writes message to log file at $USERDIR/log.txt and echoes to stderr.
43 	static void debugLogHandler(QtMsgType type, const QMessageLogContext& ctx, const QString& str);
44 
45 	//! Return a copy of text of the log file.
getLog()46 	static const QString& getLog() {return log;}
47 
getLogFileName()48 	static QString getLogFileName() {return logFile.fileName();}
49 
50 	//! Write the message plus a newline to the log file at $USERDIR/log.txt.
51 	//! @param msg message to write.
52 	//! If you call this function the message will be only in the log file,
53 	//! not on the console like with qDebug().
54 	static void writeLog(QString msg);
55 
56 private:
57 	static QFile logFile;
58 	static QString log;
59 	static QMutex fileMutex;
60 
61 	static QString getMsvcVersionString(int ver);
62 };
63 
64 #endif // STELLOGGER_HPP
65