[FEATURE][needs-doc] Introduce QGIS_SERVER_LOG_STDERR and deprecate file logging

This commit is contained in:
Éric Lemoine 2018-09-13 10:45:11 +02:00
parent b16aa15f06
commit 5b808f6a22
8 changed files with 73 additions and 11 deletions

View File

@ -47,9 +47,16 @@ Set the current log level
.. versionadded:: 3.0 .. versionadded:: 3.0
%End %End
void setLogFile( const QString &f ); void setLogFile( const QString &filename = QString() );
%Docstring %Docstring
Set the current log file Set the current log file
%End
void setLogStderr();
%Docstring
Activates logging to stderr.
.. versionadded:: 3.4.
%End %End
public slots: public slots:

View File

@ -94,6 +94,15 @@ Returns the QGS project file to use.
Returns the log file. Returns the log file.
:return: the path of the log file or an empty string if none is defined. :return: the path of the log file or an empty string if none is defined.
%End
bool logStderr() const;
%Docstring
Returns whether logging to stderr is activated.
:return: true if logging to stderr is activated, false otherwise.
.. versionadded:: 3.4
%End %End
qint64 cacheSize() const; qint64 cacheSize() const;

View File

@ -186,7 +186,14 @@ bool QgsServer::init()
// init and configure logger // init and configure logger
QgsServerLogger::instance(); QgsServerLogger::instance();
QgsServerLogger::instance()->setLogLevel( sSettings.logLevel() ); QgsServerLogger::instance()->setLogLevel( sSettings.logLevel() );
QgsServerLogger::instance()->setLogFile( sSettings.logFile() ); if ( ! sSettings.logFile().isEmpty() )
{
QgsServerLogger::instance()->setLogFile( sSettings.logFile() );
}
else if ( sSettings.logStderr() )
{
QgsServerLogger::instance()->setLogStderr();
}
// log settings currently used // log settings currently used
sSettings.logSummary(); sSettings.logSummary();

View File

@ -52,7 +52,7 @@ void QgsServerLogger::logMessage( const QString &message, const QString &tag, Qg
mTextStream << formattedMessage; mTextStream << formattedMessage;
mTextStream.flush(); mTextStream.flush();
} }
else if ( QString::compare( mLogFile.fileName(), QStringLiteral( "stderr" ), Qt::CaseInsensitive ) == 0 ) else if ( mLogStderr )
{ {
QgsMessageLogConsole::logMessage( message, tag, level ); QgsMessageLogConsole::logMessage( message, tag, level );
} }
@ -63,17 +63,20 @@ void QgsServerLogger::setLogLevel( const Qgis::MessageLevel level )
mLogLevel = level; mLogLevel = level;
} }
void QgsServerLogger::setLogFile( const QString &f ) void QgsServerLogger::setLogFile( const QString &filename )
{ {
mTextStream.flush(); mTextStream.flush();
mLogFile.close(); mLogFile.close();
mLogFile.setFileName( filename );
mLogFile.setFileName( f ); if ( ( ! filename.isEmpty() ) && mLogFile.open( QIODevice::Append ) )
if ( ( ! f.isEmpty() ) &&
QString::compare( f, QStringLiteral( "stderr" ), Qt::CaseInsensitive ) != 0 &&
mLogFile.open( QIODevice::Append ) )
{ {
mTextStream.setDevice( &mLogFile ); mTextStream.setDevice( &mLogFile );
} }
} }
void QgsServerLogger::setLogStderr()
{
setLogFile();
mLogStderr = true;
}

View File

@ -59,7 +59,13 @@ class SERVER_EXPORT QgsServerLogger : public QgsMessageLogConsole
/** /**
* Set the current log file * Set the current log file
*/ */
void setLogFile( const QString &f ); void setLogFile( const QString &filename = QString() );
/**
* Activates logging to stderr.
* \since QGIS 3.4.
*/
void setLogStderr();
public slots: public slots:
@ -79,6 +85,7 @@ class SERVER_EXPORT QgsServerLogger : public QgsMessageLogConsole
static QgsServerLogger *sInstance; static QgsServerLogger *sInstance;
QFile mLogFile; QFile mLogFile;
bool mLogStderr = false;
QTextStream mTextStream; QTextStream mTextStream;
Qgis::MessageLevel mLogLevel = Qgis::None; Qgis::MessageLevel mLogLevel = Qgis::None;
}; };

View File

@ -87,6 +87,17 @@ void QgsServerSettings::initSettings()
}; };
mSettings[ sLogFile.envVar ] = sLogFile; mSettings[ sLogFile.envVar ] = sLogFile;
// log to stderr
const Setting sLogStderr = { QgsServerSettingsEnv::QGIS_SERVER_LOG_STDERR,
QgsServerSettingsEnv::DEFAULT_VALUE,
"Activate/Deactivate logging to stderr",
"",
QVariant::Bool,
QVariant( false ),
QVariant()
};
mSettings[ sLogStderr.envVar ] = sLogStderr;
// project file // project file
const Setting sProject = { QgsServerSettingsEnv::QGIS_PROJECT_FILE, const Setting sProject = { QgsServerSettingsEnv::QGIS_PROJECT_FILE,
QgsServerSettingsEnv::DEFAULT_VALUE, QgsServerSettingsEnv::DEFAULT_VALUE,
@ -281,6 +292,11 @@ QString QgsServerSettings::logFile() const
return value( QgsServerSettingsEnv::QGIS_SERVER_LOG_FILE ).toString(); return value( QgsServerSettingsEnv::QGIS_SERVER_LOG_FILE ).toString();
} }
bool QgsServerSettings::logStderr() const
{
return value( QgsServerSettingsEnv::QGIS_SERVER_LOG_STDERR ).toBool();
}
Qgis::MessageLevel QgsServerSettings::logLevel() const Qgis::MessageLevel QgsServerSettings::logLevel() const
{ {
return static_cast<Qgis::MessageLevel>( value( QgsServerSettingsEnv::QGIS_SERVER_LOG_LEVEL ).toInt() ); return static_cast<Qgis::MessageLevel>( value( QgsServerSettingsEnv::QGIS_SERVER_LOG_LEVEL ).toInt() );

View File

@ -56,6 +56,7 @@ class SERVER_EXPORT QgsServerSettingsEnv : public QObject
QGIS_SERVER_MAX_THREADS, QGIS_SERVER_MAX_THREADS,
QGIS_SERVER_LOG_LEVEL, QGIS_SERVER_LOG_LEVEL,
QGIS_SERVER_LOG_FILE, QGIS_SERVER_LOG_FILE,
QGIS_SERVER_LOG_STDERR,
QGIS_PROJECT_FILE, QGIS_PROJECT_FILE,
MAX_CACHE_LAYERS, MAX_CACHE_LAYERS,
QGIS_SERVER_CACHE_DIRECTORY, QGIS_SERVER_CACHE_DIRECTORY,
@ -148,6 +149,13 @@ class SERVER_EXPORT QgsServerSettings
*/ */
QString logFile() const; QString logFile() const;
/**
* Returns whether logging to stderr is activated.
* \returns true if logging to stderr is activated, false otherwise.
* \since QGIS 3.4
*/
bool logStderr() const;
/** /**
* Returns the cache size. * Returns the cache size.
* \returns the cache size. * \returns the cache size.

View File

@ -46,7 +46,12 @@ class TestQgsServerLogger(unittest.TestCase):
exists = os.access(self.log_file, os.R_OK) exists = os.access(self.log_file, os.R_OK)
self.assertTrue(exists) self.assertTrue(exists)
def test_logging_stderr(self): def test_logging_log_file_stderr(self):
self.logger.setLogFile('stderr') self.logger.setLogFile('stderr')
exists = os.access(self.log_file, os.R_OK) exists = os.access(self.log_file, os.R_OK)
self.assertFalse(exists) self.assertFalse(exists)
def test_logging_stderr(self):
self.logger.setLogStderr()
exists = os.access(self.log_file, os.R_OK)
self.assertFalse(exists)