Logging: alternate file logger constructor with settings as a simple structure

pull/127/head
f4exb 2017-11-11 22:27:02 +01:00
rodzic 82083c353e
commit 2e8268d040
4 zmienionych plików z 125 dodań i 2 usunięć

1
debian/changelog vendored
Wyświetl plik

@ -3,6 +3,7 @@ sdrangel (3.8.3-1) unstable; urgency=medium
* ChannelAnalyzerNG: fixed GUI displays when channel sample rate changes
* SSB demod: fixed low cutoff channel marker display
* LimeSDR: increased start/stop stream wait time to 50ms
* New logging system with optional copy to files
-- Edouard Griffiths, F4EXB <f4exb06@gmail.com> Sun, 12 Nov 2017 18:14:18 +0100

Wyświetl plik

@ -19,6 +19,18 @@ using namespace qtwebapp;
void FileLogger::refreshSettings()
{
mutex.lock();
if (useQtSettings) {
refreshQtSettings();
} else {
refreshFileLogSettings();
}
mutex.unlock();
}
void FileLogger::refreshQtSettings()
{
// Save old file name for later comparision with new settings
QString oldFileName=fileName;
@ -49,12 +61,41 @@ void FileLogger::refreshSettings()
close();
open();
}
mutex.unlock();
}
void FileLogger::refreshFileLogSettings()
{
// Save old file name for later comparision with new settings
QString oldFileName = fileLoggerSettings.fileName;
// Load new config settings
fileName = fileLoggerSettings.fileName;
// Convert relative fileName to absolute, based on the current working directory
if (QDir::isRelativePath(fileName))
{
fileName = QFileInfo(QDir::currentPath(), fileName).absoluteFilePath();
}
maxSize = fileLoggerSettings.maxSize;
maxBackups = fileLoggerSettings.maxBackups;
msgFormat = fileLoggerSettings.msgFormat;
timestampFormat = fileLoggerSettings.timestampFormat;
minLevel = fileLoggerSettings.minLevel;
bufferSize = fileLoggerSettings.bufferSize;
// Create new file if the filename has been changed
if (oldFileName != fileName)
{
fprintf(stderr,"Logging to %s\n",qPrintable(fileName));
close();
open();
}
}
FileLogger::FileLogger(QSettings* settings, const int refreshInterval, QObject* parent)
: Logger(parent)
: Logger(parent), useQtSettings(true)
{
Q_ASSERT(settings!=0);
Q_ASSERT(refreshInterval>=0);
@ -68,6 +109,20 @@ FileLogger::FileLogger(QSettings* settings, const int refreshInterval, QObject*
refreshSettings();
}
FileLogger::FileLogger(const FileLoggerSettings& settings, const int refreshInterval, QObject* parent)
: Logger(parent), useQtSettings(false)
{
Q_ASSERT(refreshInterval>=0);
fileLoggerSettings = settings;
file=0;
if (refreshInterval>0)
{
refreshTimer.start(refreshInterval,this);
}
flushTimer.start(1000,this);
refreshSettings();
}
FileLogger::~FileLogger()
{

Wyświetl plik

@ -13,6 +13,7 @@
#include <QBasicTimer>
#include "logglobal.h"
#include "logger.h"
#include "fileloggersettings.h"
namespace qtwebapp {
@ -64,6 +65,14 @@ public:
*/
FileLogger(QSettings* settings, const int refreshInterval=10000, QObject* parent = 0);
/**
Constructor.
@param settings Configuration settings as a simple structure (see: FileLoggerSettings).
@param refreshInterval Interval of checking for changed config settings in msec, or 0=disabled
@param parent Parent object
*/
FileLogger(const FileLoggerSettings& settings, const int refreshInterval=10000, QObject* parent = 0);
/**
Destructor. Closes the file.
*/
@ -96,6 +105,9 @@ private:
/** Pointer to the configuration settings */
QSettings* settings;
/** Pointer to the configuration settings */
FileLoggerSettings fileLoggerSettings;
/** Output file, or 0=disabled */
QFile* file;
@ -105,6 +117,9 @@ private:
/** Timer for flushing the file I/O buffer */
QBasicTimer flushTimer;
/** Use of Qt settings or simple structure settings */
bool useQtSettings;
/** Open the output file */
void open();
@ -120,6 +135,16 @@ private:
*/
void refreshSettings();
/**
Refreshes the configuration settings with Qt settings.
*/
void refreshQtSettings();
/**
Refreshes the configuration settings with file log settings structure.
*/
void refreshFileLogSettings();
};
} // end of namespace

Wyświetl plik

@ -0,0 +1,42 @@
/*
* fileloggersettings.h
*
* Created on: Nov 11, 2017
* Author: f4exb
*/
#ifndef LOGGING_FILELOGGERSETTINGS_H_
#define LOGGING_FILELOGGERSETTINGS_H_
#include <QtGlobal>
namespace qtwebapp {
struct FileLoggerSettings
{
QString fileName;
long maxSize;
int maxBackups;
QString msgFormat;
QString timestampFormat;
QtMsgType minLevel;
int bufferSize;
FileLoggerSettings() {
resetToDefaults();
}
void resetToDefaults() {
fileName = "logging.log";
maxSize = 1000000;
maxBackups = 2;
msgFormat = "{timestamp} {type} {msg}";
timestampFormat = "dd.MM.yyyy hh:mm:ss.zzz";
minLevel = QtDebugMsg;
bufferSize = 100;
}
};
} // end of namespace
#endif /* LOGGING_FILELOGGERSETTINGS_H_ */