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 件のコメント :
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。