Skip to content

Commit 5b808f6

Browse files
author
Éric Lemoine
committed
[FEATURE][needs-doc] Introduce QGIS_SERVER_LOG_STDERR and deprecate file logging
1 parent b16aa15 commit 5b808f6

8 files changed

+73
-11
lines changed

python/server/auto_generated/qgsserverlogger.sip.in

+8-1
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,16 @@ Set the current log level
4747
.. versionadded:: 3.0
4848
%End
4949

50-
void setLogFile( const QString &f );
50+
void setLogFile( const QString &filename = QString() );
5151
%Docstring
5252
Set the current log file
53+
%End
54+
55+
void setLogStderr();
56+
%Docstring
57+
Activates logging to stderr.
58+
59+
.. versionadded:: 3.4.
5360
%End
5461

5562
public slots:

python/server/auto_generated/qgsserversettings.sip.in

+9
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,15 @@ Returns the QGS project file to use.
9494
Returns the log file.
9595

9696
:return: the path of the log file or an empty string if none is defined.
97+
%End
98+
99+
bool logStderr() const;
100+
%Docstring
101+
Returns whether logging to stderr is activated.
102+
103+
:return: true if logging to stderr is activated, false otherwise.
104+
105+
.. versionadded:: 3.4
97106
%End
98107

99108
qint64 cacheSize() const;

src/server/qgsserver.cpp

+8-1
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,14 @@ bool QgsServer::init()
186186
// init and configure logger
187187
QgsServerLogger::instance();
188188
QgsServerLogger::instance()->setLogLevel( sSettings.logLevel() );
189-
QgsServerLogger::instance()->setLogFile( sSettings.logFile() );
189+
if ( ! sSettings.logFile().isEmpty() )
190+
{
191+
QgsServerLogger::instance()->setLogFile( sSettings.logFile() );
192+
}
193+
else if ( sSettings.logStderr() )
194+
{
195+
QgsServerLogger::instance()->setLogStderr();
196+
}
190197

191198
// log settings currently used
192199
sSettings.logSummary();

src/server/qgsserverlogger.cpp

+10-7
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ void QgsServerLogger::logMessage( const QString &message, const QString &tag, Qg
5252
mTextStream << formattedMessage;
5353
mTextStream.flush();
5454
}
55-
else if ( QString::compare( mLogFile.fileName(), QStringLiteral( "stderr" ), Qt::CaseInsensitive ) == 0 )
55+
else if ( mLogStderr )
5656
{
5757
QgsMessageLogConsole::logMessage( message, tag, level );
5858
}
@@ -63,17 +63,20 @@ void QgsServerLogger::setLogLevel( const Qgis::MessageLevel level )
6363
mLogLevel = level;
6464
}
6565

66-
void QgsServerLogger::setLogFile( const QString &f )
66+
void QgsServerLogger::setLogFile( const QString &filename )
6767
{
6868
mTextStream.flush();
6969
mLogFile.close();
70+
mLogFile.setFileName( filename );
7071

71-
mLogFile.setFileName( f );
72-
73-
if ( ( ! f.isEmpty() ) &&
74-
QString::compare( f, QStringLiteral( "stderr" ), Qt::CaseInsensitive ) != 0 &&
75-
mLogFile.open( QIODevice::Append ) )
72+
if ( ( ! filename.isEmpty() ) && mLogFile.open( QIODevice::Append ) )
7673
{
7774
mTextStream.setDevice( &mLogFile );
7875
}
7976
}
77+
78+
void QgsServerLogger::setLogStderr()
79+
{
80+
setLogFile();
81+
mLogStderr = true;
82+
}

src/server/qgsserverlogger.h

+8-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,13 @@ class SERVER_EXPORT QgsServerLogger : public QgsMessageLogConsole
5959
/**
6060
* Set the current log file
6161
*/
62-
void setLogFile( const QString &f );
62+
void setLogFile( const QString &filename = QString() );
63+
64+
/**
65+
* Activates logging to stderr.
66+
* \since QGIS 3.4.
67+
*/
68+
void setLogStderr();
6369

6470
public slots:
6571

@@ -79,6 +85,7 @@ class SERVER_EXPORT QgsServerLogger : public QgsMessageLogConsole
7985
static QgsServerLogger *sInstance;
8086

8187
QFile mLogFile;
88+
bool mLogStderr = false;
8289
QTextStream mTextStream;
8390
Qgis::MessageLevel mLogLevel = Qgis::None;
8491
};

src/server/qgsserversettings.cpp

+16
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,17 @@ void QgsServerSettings::initSettings()
8787
};
8888
mSettings[ sLogFile.envVar ] = sLogFile;
8989

90+
// log to stderr
91+
const Setting sLogStderr = { QgsServerSettingsEnv::QGIS_SERVER_LOG_STDERR,
92+
QgsServerSettingsEnv::DEFAULT_VALUE,
93+
"Activate/Deactivate logging to stderr",
94+
"",
95+
QVariant::Bool,
96+
QVariant( false ),
97+
QVariant()
98+
};
99+
mSettings[ sLogStderr.envVar ] = sLogStderr;
100+
90101
// project file
91102
const Setting sProject = { QgsServerSettingsEnv::QGIS_PROJECT_FILE,
92103
QgsServerSettingsEnv::DEFAULT_VALUE,
@@ -281,6 +292,11 @@ QString QgsServerSettings::logFile() const
281292
return value( QgsServerSettingsEnv::QGIS_SERVER_LOG_FILE ).toString();
282293
}
283294

295+
bool QgsServerSettings::logStderr() const
296+
{
297+
return value( QgsServerSettingsEnv::QGIS_SERVER_LOG_STDERR ).toBool();
298+
}
299+
284300
Qgis::MessageLevel QgsServerSettings::logLevel() const
285301
{
286302
return static_cast<Qgis::MessageLevel>( value( QgsServerSettingsEnv::QGIS_SERVER_LOG_LEVEL ).toInt() );

src/server/qgsserversettings.h

+8
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ class SERVER_EXPORT QgsServerSettingsEnv : public QObject
5656
QGIS_SERVER_MAX_THREADS,
5757
QGIS_SERVER_LOG_LEVEL,
5858
QGIS_SERVER_LOG_FILE,
59+
QGIS_SERVER_LOG_STDERR,
5960
QGIS_PROJECT_FILE,
6061
MAX_CACHE_LAYERS,
6162
QGIS_SERVER_CACHE_DIRECTORY,
@@ -148,6 +149,13 @@ class SERVER_EXPORT QgsServerSettings
148149
*/
149150
QString logFile() const;
150151

152+
/**
153+
* Returns whether logging to stderr is activated.
154+
* \returns true if logging to stderr is activated, false otherwise.
155+
* \since QGIS 3.4
156+
*/
157+
bool logStderr() const;
158+
151159
/**
152160
* Returns the cache size.
153161
* \returns the cache size.

tests/src/python/test_qgsserverlogger.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,12 @@ def test_logging_log_file(self):
4646
exists = os.access(self.log_file, os.R_OK)
4747
self.assertTrue(exists)
4848

49-
def test_logging_stderr(self):
49+
def test_logging_log_file_stderr(self):
5050
self.logger.setLogFile('stderr')
5151
exists = os.access(self.log_file, os.R_OK)
5252
self.assertFalse(exists)
53+
54+
def test_logging_stderr(self):
55+
self.logger.setLogStderr()
56+
exists = os.access(self.log_file, os.R_OK)
57+
self.assertFalse(exists)

0 commit comments

Comments
 (0)