C++ (Qt)UniStitch::Instance()->Write2Log("abc");
C++ (Qt)static class UniStitch : public QMainWindow{ Q_OBJECT public: explicit UniStitch(QWidget *parent = 0); ~UniStitch(); void Write2Log(QString logLine); static UniStitch *stitch;
C++ (Qt)UniStitch::stitch->Write2Log("Требуется больше изображений!");
C++ (Qt)void logMessageOutput (QtMsgType type, const char *msg){ static QFile logFile; static QTextStream stream; stream.setCodec ("UTF-8"); static QMap <QtMsgType, QString> messages; if (messages.isEmpty()) { messages [QtDebugMsg] = "Debug"; messages [QtWarningMsg] = "Warning"; messages [QtCriticalMsg] = "Critical"; messages [QtFatalMsg] = "Fatal"; } if (!logFile.isOpen ()) { logFile.setFileName (QCoreApplication::applicationDirPath () + "/" + QCoreApplication::applicationName () + ".log"); logFile.open (QIODevice::WriteOnly | QIODevice::Append); stream.setDevice (&logFile); } if (logFile.isOpen ()) { stream << QDateTime::currentDateTime ().toString ("yyyy-MM-dd_hh:mm:ss") << " " << messages [type] << ": " << msg << endl; }}
C++ (Qt)const size_t maxLogFileSize = 1 * 1024 * 1024; //1 MB class LogFile{public: explicit LogFile (QtMsgType type) : type_ (type) { messages_ [QtDebugMsg] = "Debug"; messages_ [QtWarningMsg] = "Warning"; messages_ [QtCriticalMsg] = "Critical"; messages_ [QtFatalMsg] = "Fatal"; fileNames_ [QtDebugMsg] = appName + "_debug.log"; fileNames_ [QtWarningMsg] = appName + "_warning.log"; fileNames_ [QtCriticalMsg] = appName + "_critical.log"; fileNames_ [QtFatalMsg] = appName + "_fatal.log"; file_.setFileName (QCoreApplication::applicationDirPath () + "/" + fileNames_ [type_]); QIODevice::OpenMode openMode = QIODevice::WriteOnly; if (file_.exists () && file_.size () < maxLogFileSize) { openMode |= QIODevice::Append; } file_.open (openMode); stream_.setDevice (&file_); stream_.setCodec ("UTF-8"); } ~LogFile () { stream_.flush (); file_.flush (); file_.close (); } template <class T> void setMessage (const T &msg) { if (file_.isOpen ()) { stream_ << QDateTime::currentDateTime ().toString ("yyyy-MM-dd hh:mm:ss") << " " << messages_ [type_] << ": " << msg << endl; } } private: LogFile (const LogFile &); LogFile &operator= (const LogFile &); private: QtMsgType type_; QMap <QtMsgType, QString> messages_; QMap <QtMsgType, QString> fileNames_; QFile file_; QTextStream stream_;}; typedef QSharedPointer <LogFile> LogFilePtr; void logMessageOutput (QtMsgType type, const char *msg){ static QMap <QtMsgType, LogFilePtr> files; if (!files.contains (type)) { files [type] = LogFilePtr (new LogFile (type)); } files [type]->setMessage (QString::fromUtf8 (msg));}