2012年6月21日木曜日

ログ関数(可変長引数)

ちょいと汎用のログ関数(ログするデータを可変長にする)が欲しくなったので作ってみた。昔からよくやる手が、文字列バッファにsprintfでログ内容をその場その場で作成し、文字列としてロギングする方法だけど、どうみてもこれスマートじゃないよね。というわけで可変長引数を使ってみた。

簡単な実装例を示す。


FILE* glb::logFile;

void glb::logOpen( const char* filename )
{
 logFile = fopen( filename, "w" );
}

void glb::logClose( )
{
 if ( logFile != NULL )
   fclose( logFile );
}

void glb::logging( const char* format, ... )
{
 va_list argp;
 va_start( argp, format );
 vfprintf( logFile, format, argp );
 fprintf( logFile, "\n" );
 va_end( argp );
}

printfみたいにformatを入れないといけないのが難点だけど、そのおかげで文字データだろうが、整数だろうが浮動小数点だろうが自由にログできる。(format使うおかげで、csv形式にも簡単になるしね)

 glb::logOpen( "log.log" );

 glb::logging( "%s", "1st" );
 glb::logging( " %s, %s", "2nd", "3rd" );
 glb::logging( "%f", 3.0 );

 glb::logClose( );

0 件のコメント:

コメントを投稿