如何将C/C++printf()消息重定向到windows电话日志系统



我想编译一个C/C++宏,它允许我在许多不同的平台上记录调试消息。我的代码适用于Android、iPhone、Win32,我想添加对WindowsPhone的支持。

我该怎么做(能够将ascii消息写入日志文件/控制台)?

我是WindowsPhone平台的新手,所以如果有几个不同的日志记录系统,请建议我使用哪一个。

我的代码附在下面:

#if (WIN_PC_OS)
// In windows EXE's, DLL's and Lib's allow logging
#define MY_SYSTEM_LOG_INFO(...)   fprintf(stderr, __VA_ARGS__)
#define MY_SYSTEM_LOG_WARN(...)   fprintf(stderr, __VA_ARGS__)
#define MY_SYSTEM_LOG_ERR_(...)   fprintf(stderr, __VA_ARGS__)
#elif (ANDR_OS)
// Redirect log messages to android log.
#include <android/log.h>
#define MY_SYSTEM_LOG_INFO(...)   __android_log_print(ANDROID_LOG_INFO    ,LOG_TAG,__VA_ARGS__)
#define MY_SYSTEM_LOG_WARN(...)   __android_log_print(ANDROID_LOG_WARN    ,LOG_TAG,__VA_ARGS__)
#define MY_SYSTEM_LOG_ERR_(...)   __android_log_print(ANDROID_LOG_ERROR   ,LOG_TAG,__VA_ARGS__)
#elif (APPLE_OS)
// Redirect log messages to iPhone log. Like NSLog(@__VA_ARGS__);
#define MY_SYSTEM_LOG_INFO(...)   fprintf(stderr, __VA_ARGS__)     
#define MY_SYSTEM_LOG_WARN(...)   fprintf(stderr, __VA_ARGS__)
#define MY_SYSTEM_LOG_ERR_(...)   fprintf(stderr, __VA_ARGS__)
#else
// Windows phone supported yet!!!!
#endif

Windows Phone Runtime有常见的stderrstdout描述符,您可以使用这些描述符,类似于问题片段中显示的WIN_PC_OS情况。事实上,你可以把这两种情况结合起来。

但是您已经将C和C++都表示为该问题的标记,因此请注意,如果您希望为C++提供一个单独的宏,并将std::cerrstd::endl一起使用,如中所示

std::cerr << "INFO my info log message" << std::endl;

将刷新输出缓冲区,而使用C时,请考虑在fprintf(stderr)之后是否需要fflush(stderr)

最新更新