ちょいと汎用のログ関数(ログするデータを可変長にする)が欲しくなったので作ってみた。昔からよくやる手が、文字列バッファに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 件のコメント:
コメントを投稿