streamもいいけどAndroidのアレも結構好きなんだよなぁということで。
本来は第一引数がタグ指定だけど__FUNCTION__を使ってみたかっただけ。
// *.h
#if defined(LOG_ENABLE) && defined(LOG_E_ENABLE)
#define Log_e(fmt, ...) \
log_fprint(stderr, "E/" ## __FUNCTION__, __FILE__, __LINE__, fmt, ## __VA_ARGS__)
#else
#define Log_e(fmt, ...) (void)0
#endif // defined(LOG_ENABLE) && defined(LOG_E_ENABLE)
// *.cpp
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
static char _buff[512];
static char _filename[256];
static char _ext[5];
void log_fprint(FILE* file, const char* func, const char* filename, int line, const char* format, ...){
// Windowsの__FILE__はフルパスらしい
_splitpath_s(filename, NULL, 0, NULL, 0, _filename, sizeof(_filename), _ext, sizeof(_ext));
va_list args;
va_start(args, format);
sprintf_s(_buff, sizeof(_buff), "%s %s%s(%6d): %s", func, _filename, _ext, line, format);
vfprintf_s(file, _buff, args);
va_end(args);
}
使い方は下記のような感じ。
Log_e("hogehoge\n");
Log_e("hoge %s bar = %d\n", "foo", 10);
コンソールへの出力イメージ。
main関数内の該当行から呼び出しただけなので有り難味が・・・。
ソースはこちら。

0 件のコメント :
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。