QGISのログ(QgsDebugMsg)を有効にする

QGISのソースを確認すると「QgsDebugMsg」で多くのログが吐かれている。
これはQGISの内部の動作を追うには大変参考になる。
※レンダリング関係はデバッカーで追うのは大変。

実際にqgslogger.cppを確認すると下記の環境変数を設定する必要がある。
QGIS_DEBUG:1
QGIS_LOG_FILE:ログファイルのフルパス
※QGIS_DEBUG_FILEは不明

int QgsLogger::sDebugLevel = -999; // undefined value
int QgsLogger::sPrefixLength = -1;
QString QgsLogger::sFileFilter;
QString QgsLogger::sLogFile;
QTime QgsLogger::sTime;

void QgsLogger::init()
{
  if ( sDebugLevel != -999 )
    return;

  sTime.start();

  sLogFile = getenv( "QGIS_LOG_FILE" ) ? getenv( "QGIS_LOG_FILE" ) : "";
  sFileFilter = getenv( "QGIS_DEBUG_FILE" ) ? getenv( "QGIS_DEBUG_FILE" ) : "";
  sDebugLevel = getenv( "QGIS_DEBUG" ) ? atoi( getenv( "QGIS_DEBUG" ) ) :
#ifdef QGISDEBUG
                1
#else
                0
#endif
                ;

  sPrefixLength = sizeof( CMAKE_SOURCE_DIR );
  if ( CMAKE_SOURCE_DIR[sPrefixLength-1] == '/' )
    sPrefixLength++;
}

void QgsLogger::logMessageToFile( const QString& theMessage )
{
  if ( sLogFile.isEmpty() )
    return;

  //Maybe more efficient to keep the file open for the life of qgis...
  QFile file( sLogFile );
  if ( !file.open( QIODevice::Append ) )
    return;
  file.write( theMessage.toLocal8Bit().constData() );
  file.write( "\n" );
  file.close();
}

qgis起動バッチ(qgis.bat)に以下を記述してQGISを起動すると指定されたログが出力される

set QGIS_LOG_FILE=C:\QGIS\log.txt
set QGIS_DEBUG=1