C++ 日志输出

强烈推荐日志库spdlog
日志输出的方式分为两种

1、format格式化输出

LOGI_F("test log:%s","hellow word");

2、流的方式出书

LOGI("test log:"<<"hellow word");

实现日志输出接口:

void _DebugTraceA(const char* fmt,...)
{
	va_list args;
	va_start(args, fmt);
	int size = _vscprintf(fmt, args);
	std::string strfmt(size + 1, 0);
	_vsnprintf_s(&strfmt[0], strfmt.size(), strfmt.size(), fmt, args);
	va_end(args);
	OutputDebugStringA(strfmt.c_str());
}

void _DebugTraceW(const wchar_t* fmt,...)
{
	va_list args;
	va_start(args, fmt);
	int size = _vscwprintf(fmt, args);
	std::wstring strfmt(size + 1, 0);
	_vsnwprintf_s(&strfmt[0], strfmt.size(), strfmt.size(), fmt, args);
	va_end(args);
	OutputDebugStringW(strfmt.c_str());
}

格式化宏:

#ifdef _UNICODE
#define LOGI_F(fmt,...) _DebugTraceW("[test]" fmt "\n",__VA_ARGS__);
#else
#define LOGI_F(fmt,...) _DebugTraceA("[test]" fmt "\n",__VA_ARGS__);
#endif

流式宏:

#ifdef _UNICODE
#define DebugTrace(info_ostream)\
{\
	std::wstringstream ss;\
	ss << info_ostream;\
	_DebugTraceW(ss.str().c_str());\
}
#else
#define DebugTrace(info_ostream)\
{\
	std::stringstream ss;\
	ss << info_ostream;\
	_DebugTraceA(ss.str().c_str());\
}
#endif

注意:

  • 在流式输出中,unicode和ansi切换的过程中编译不会报错,但是日志可能输出不对。所以最好统一使用TCHAR
  • 如果直接输出带有%特别字符的,请使用DebugTrace("%s","%d%d%123"),否则会报错。例如url编码的字符
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值