【问题标题】:How to redirect C/C++ printf() messages to windows phone logging system如何将 C/C++ printf() 消息重定向到 Windows Phone 日志系统
【发布时间】:2014-01-25 08:08:00
【问题描述】:

我想编译一个 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

【问题讨论】:

  • 它是C还是C++?
  • 我不在乎哪种语言。我将使用 C++ 编译器对其进行编译。 printf() 是 C 函数,但 C++ 编译器接受它。
  • @Casey,我竭尽全力将 C 和 C++ 解耦——尽管我经常觉得这很烦人——但有时这并不重要。 C 的某些方面总是会成为 C++ 的一部分。
  • @DanielHsH 你真的是针对 windows phone 7 吗? MS 认为这已经过时了...如果您的目标是 windows phone 8,您可能希望使用 Windows::Foundation::Diagnostics 命名空间中的工具进行日志记录,因为不能保证 stderr 会去您想要的地方。

标签: c++ c windows-phone-7 logging


【解决方案1】:

Windows Phone 运行时具有通常的stderrstdout 描述符,您可以使用类似于问题中的sn-p 中显示的WIN_PC_OS 情况。事实上,你可以将这两种情况结合起来。

但是您已将 C 和 C++ 作为问题的标签,因此请注意,如果您希望为 C++ 提供单独的宏并将std::cerrstd::endl 一起使用,如,

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多