16,472
社区成员
发帖
与我相关
我的任务
分享
/*******************************************************************
created: 29:4:2010 12:20
purpose: 日志函数
@parament: none
*******************************************************************/
#ifdef _UNICODE
#ifndef UNICODE
#define UNICODE
#endif
#define WIDEN2(x) L ## x
#define WIDEN(x) WIDEN2(x)
#define __WFILE__ WIDEN(__FILE__)
#define __WFUNCTION__ WIDEN(__FUNCTION__)
#define __WLINE__ WIDEN(__LINE__)
#define __WVA_ARGS__ WIDEN(__VA_ARGS__)
#define log_printf(ls, fn, ln, yorn, ... ) do { \
ofstream logTest(L"foo.log"); \
streambuf *oldbuf = cout.rdbuf(logTest.rdbuf()); \
WCHAR log[2560] = {0}; \
WCHAR logCxx[4096] = {0}; \
_snwprintf_s(log, sizeof(log), __WVA_ARGS__ ); \
fn != NULL ? swprintf_s(logCxx, L"%s %s at %s on line %d.\n %s\n", ls, __WFUNCTION__, fn , ln, log) : swprintf_s(logCxx, L"%s %s\n %s\n", ls, __WFUNCTION__, log) ; \
yorn == 'y' ? (1==1) : (1==1) ; \
cout<<logCxx;\
cout.rdbuf(oldbuf); \
}while(0);
#define log_error( ... ) log_printf(L"Error:", __WFILE__, __WLINE__, 'n', __VA_ARGS__ )
#ifdef _DEBUG
#define log_debug( ... ) log_printf(L"Debug:", __WFILE__, __WLINE__, 'n', __VA_ARGS__ )
#else//_DEBUG
#define log_debug( ... ) do {} while(0);
#endif //_DEBUG
#define log_fetal( ... ) log_printf(L"Fetal:", __WFILE__, __WLINE__, 'y', __VA_ARGS__ )
#define qlog( ... ) log_printf(L"Info:", (WCHAR*)0, 0, 'n', __VA_ARGS__ )
#else //_UNICODE
#define log_printf(ls, fn, ln, yorn, ... ) do { \
ofstream logTest("foo.log"); \
streambuf *oldbuf = cout.rdbuf(logTest.rdbuf()); \
char log[2560] = {0}; \
char logCxx[4096] = {0}; \
_snprintf_s(log, sizeof(log), __VA_ARGS__ ); \
fn != NULL ? sprintf_s(logCxx, "%s %s at %s on line %d.\n %s\n", ls, __FUNCTION__, fn , ln, log) : sprintf_s(logCxx, "%s %s\n %s\n", ls, __FUNCTION__, log) ; \
yorn == 'y' ? (1==1) : (1==1) ; \
cout<<logCxx;\
cout.rdbuf(oldbuf); \
}while(0);
#define log_error( ... ) log_printf("Error:", __FILE__, __LINE__, 'n', __VA_ARGS__ )
#ifdef _DEBUG
#define log_debug( ... ) log_printf("Debug:", __FILE__, __LINE__, 'n', __VA_ARGS__ )
#else//_DEBUG
#define log_debug( ... ) do {} while(0);
#endif //_DEBUG
#define log_fetal( ... ) log_printf("Fetal:", __FILE__, __LINE__, 'y', __VA_ARGS__ )
#define qlog( ... ) log_printf("Info:", (char*)0, 0, 'n', __VA_ARGS__ )
#endif//_UNICODE
#ifdef _UNICODE
#define WIDEN2(x) L ## x
#else
#define WIDEN2(x) x
#endif