Skip to content

Commit

Permalink
Merge pull request mavlink#6336 from DonLakeFlyer/LogOutput
Browse files Browse the repository at this point in the history
Allow logging console output to file from command line
  • Loading branch information
DonLakeFlyer authored Apr 11, 2018
2 parents 928ad19 + 8e83e19 commit c447824
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 25 deletions.
38 changes: 15 additions & 23 deletions src/QGCApplication.cc
Original file line number Diff line number Diff line change
Expand Up @@ -138,31 +138,22 @@ static QObject* qgroundcontrolQmlGlobalSingletonFactory(QQmlEngine*, QJSEngine*)
return qmlGlobal;
}

/**
* @brief Constructor for the main application.
*
* This constructor initializes and starts the whole application. It takes standard
* command-line parameters
*
* @param argc The number of command-line parameters
* @param argv The string array of parameters
**/

QGCApplication::QGCApplication(int &argc, char* argv[], bool unitTesting)
#ifdef __mobile__
: QGuiApplication(argc, argv)
, _qmlAppEngine(NULL)
#else
: QApplication(argc, argv)
#endif
, _runningUnitTests(unitTesting)
, _fakeMobile(false)
, _settingsUpgraded(false)
#ifdef QT_DEBUG
, _testHighDPI(false)
#endif
, _toolbox(NULL)
, _bluetoothAvailable(false)
: QGuiApplication (argc, argv)
, _qmlAppEngine (NULL)
#else
: QApplication (argc, argv)
#endif
, _runningUnitTests (unitTesting)
, _logOutput (false)
, _fakeMobile (false)
, _settingsUpgraded (false)
#ifdef QT_DEBUG
, _testHighDPI (false)
#endif
, _toolbox (NULL)
, _bluetoothAvailable (false)
{
_app = this;

Expand Down Expand Up @@ -225,6 +216,7 @@ QGCApplication::QGCApplication(int &argc, char* argv[], bool unitTesting)
{ "--clear-settings", &fClearSettingsOptions, NULL },
{ "--logging", &logging, &loggingOptions },
{ "--fake-mobile", &_fakeMobile, NULL },
{ "--log-output", &_logOutput, NULL },
#ifdef QT_DEBUG
{ "--test-high-dpi", &_testHighDPI, NULL },
#endif
Expand Down
6 changes: 5 additions & 1 deletion src/QGCApplication.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,12 @@ class QGCApplication : public
/// @brief Clears the persistent flag to delete all settings the next time QGroundControl is started.
void clearDeleteAllSettingsNextBoot(void);

/// @brief Returns truee if unit test are being run
/// @brief Returns true if unit tests are being run
bool runningUnitTests(void) { return _runningUnitTests; }

/// @brief Returns true if Qt debug output should be logged to a file
bool logOutput(void) { return _logOutput; }

/// Used to report a missing Parameter. Warning will be displayed to user. Method may be called
/// multiple times.
void reportMissingParameter(int componentId, const QString& name);
Expand Down Expand Up @@ -158,6 +161,7 @@ private slots:
#endif

bool _runningUnitTests; ///< true: running unit tests, false: normal app
bool _logOutput; ///< true: Log Qt debug output to file

static const char* _darkStyleFile;
static const char* _lightStyleFile;
Expand Down
28 changes: 27 additions & 1 deletion src/QmlControls/AppMessages.cc
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,12 @@

// Allows QGlobalStatic to work on this translation unit
#define _LOG_CTOR_ACCESS_ public

#include "AppMessages.h"
#include <QFile>
#include "QGCApplication.h"
#include "SettingsManager.h"
#include "AppSettings.h"

#include <QStringListModel>
#include <QtConcurrent>
#include <QTextStream>
Expand Down Expand Up @@ -87,4 +91,26 @@ void AppLogModel::threadsafeLog(const QString message)
const int line = rowCount();
insertRows(line, 1);
setData(index(line), message, Qt::DisplayRole);

if (qgcApp()->logOutput()) {
if (_logFile.fileName().isEmpty()) {
QGCToolbox* toolbox = qgcApp()->toolbox();
// Be careful of toolbox not being open yet
if (toolbox) {
QString saveDirPath = qgcApp()->toolbox()->settingsManager()->appSettings()->crashSavePath();
QDir saveDir(saveDirPath);
QString saveFilePath = saveDir.absoluteFilePath(QStringLiteral("QGCConsole.log"));

_logFile.setFileName(saveFilePath);
if (!_logFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
qgcApp()->showMessage(tr("Open console log output file failed %1 : %2").arg(_logFile.fileName()).arg(_logFile.errorString()));
}
}
}

if (_logFile.isOpen()) {
QTextStream out(&_logFile);
out << message << "\n";
}
}
}
4 changes: 4 additions & 0 deletions src/QmlControls/AppMessages.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include <QObject>
#include <QStringListModel>
#include <QUrl>
#include <QFile>

// Hackish way to force only this translation unit to have public ctor access
#ifndef _LOG_CTOR_ACCESS_
Expand All @@ -34,6 +35,9 @@ class AppLogModel : public QStringListModel
private slots:
void threadsafeLog(const QString message);

private:
QFile _logFile;

_LOG_CTOR_ACCESS_:
AppLogModel();
};
Expand Down

0 comments on commit c447824

Please sign in to comment.