2014-01-07 47 views
2

我想編譯一個C/C++宏,它允許我在多個不同的平臺上記錄調試消息。我的代碼適用於Android,iPhone,Win32,我想添加對WindowsPhone的支持。如何將C/C++ printf()消息重定向到Windows Phone日誌記錄系統

我該怎麼做(能夠寫入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 
+3

這是C或C++嗎? – Casey

+0

我不在乎哪種語言。我將用C++編譯器進行編譯。 printf()是C函數,但C++編譯器接受它。 – DanielHsH

+1

@Casey,我盡全力將C和C++解耦 - 儘管我發現它更經常煩人 - 但有時它並不重要。 C的某些方面總是會成爲C++的一部分。 – Duck

回答

0

的Windows Phone運行時具有通常的stderrstdout的描述,你同樣可以使用你已經在討論的片段所示的WIN_PC_OS情況。事實上,你可以結合這兩種情況。

但是你已經表示C和C++爲問題標籤,因此請注意,如果您希望爲C++提供了一個單獨的宏,並使用std::cerrstd::endl,如,

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

將刷新輸出緩衝區,同時用C考慮是否需要fflush(stderr)fprintf(stderr)

相關問題