logging.h 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. //
  2. // libtgvoip is free and unencumbered public domain software.
  3. // For more information, see http://unlicense.org or the UNLICENSE file
  4. // you should have received with this source code distribution.
  5. //
  6. #ifndef __LOGGING_H
  7. #define __LOGGING_H
  8. #define LSTR_INT(x) LSTR_DO_INT(x)
  9. #define LSTR_DO_INT(x) #x
  10. #ifdef __APPLE__
  11. #include <TargetConditionals.h>
  12. #endif
  13. #include <stdio.h>
  14. void tgvoip_log_file_printf(char level, const char* msg, ...);
  15. void tgvoip_log_file_write_header(FILE* file);
  16. #if defined(__ANDROID__)
  17. #include <android/log.h>
  18. //#define _LOG_WRAP(...) __BASE_FILE__":"LSTR_INT(__LINE__)": "__VA_ARGS__
  19. #define _LOG_WRAP(...) __VA_ARGS__
  20. #define TAG "tg-voip-native"
  21. #define LOGV(...) {__android_log_print(ANDROID_LOG_VERBOSE, TAG, _LOG_WRAP(__VA_ARGS__)); tgvoip_log_file_printf('V', __VA_ARGS__);}
  22. #define LOGD(...) {__android_log_print(ANDROID_LOG_DEBUG, TAG, _LOG_WRAP(__VA_ARGS__)); tgvoip_log_file_printf('D', __VA_ARGS__);}
  23. #define LOGI(...) {__android_log_print(ANDROID_LOG_INFO, TAG, _LOG_WRAP(__VA_ARGS__)); tgvoip_log_file_printf('I', __VA_ARGS__);}
  24. #define LOGW(...) {__android_log_print(ANDROID_LOG_WARN, TAG, _LOG_WRAP(__VA_ARGS__)); tgvoip_log_file_printf('W', __VA_ARGS__);}
  25. #define LOGE(...) {__android_log_print(ANDROID_LOG_ERROR, TAG, _LOG_WRAP(__VA_ARGS__)); tgvoip_log_file_printf('E', __VA_ARGS__);}
  26. #elif defined(__APPLE__) && TARGET_OS_IPHONE && defined(TGVOIP_HAVE_TGLOG)
  27. #include "os/darwin/TGLogWrapper.h"
  28. #define LOGV(msg, ...) {__tgvoip_call_tglog("V/tgvoip: " msg, ##__VA_ARGS__); tgvoip_log_file_printf('V', msg, ##__VA_ARGS__);}
  29. #define LOGD(msg, ...) {__tgvoip_call_tglog("D/tgvoip: " msg, ##__VA_ARGS__); tgvoip_log_file_printf('D', msg, ##__VA_ARGS__);}
  30. #define LOGI(msg, ...) {__tgvoip_call_tglog("I/tgvoip: " msg, ##__VA_ARGS__); tgvoip_log_file_printf('I', msg, ##__VA_ARGS__);}
  31. #define LOGW(msg, ...) {__tgvoip_call_tglog("W/tgvoip: " msg, ##__VA_ARGS__); tgvoip_log_file_printf('W', msg, ##__VA_ARGS__);}
  32. #define LOGE(msg, ...) {__tgvoip_call_tglog("E/tgvoip: " msg, ##__VA_ARGS__); tgvoip_log_file_printf('E', msg, ##__VA_ARGS__);}
  33. #elif defined(_WIN32) && !defined(__MINGW32__) && defined(_DEBUG)
  34. #include <windows.h>
  35. #include <stdio.h>
  36. #define _TGVOIP_W32_LOG_PRINT(verb, msg, ...){ char __log_buf[1024]; snprintf(__log_buf, 1024, "%c/tgvoip: " msg "\n", verb, ##__VA_ARGS__); OutputDebugStringA(__log_buf); tgvoip_log_file_printf((char)verb, msg, __VA_ARGS__);}
  37. #define LOGV(msg, ...) _TGVOIP_W32_LOG_PRINT('V', msg, ##__VA_ARGS__)
  38. #define LOGD(msg, ...) _TGVOIP_W32_LOG_PRINT('D', msg, ##__VA_ARGS__)
  39. #define LOGI(msg, ...) _TGVOIP_W32_LOG_PRINT('I', msg, ##__VA_ARGS__)
  40. #define LOGW(msg, ...) _TGVOIP_W32_LOG_PRINT('W', msg, ##__VA_ARGS__)
  41. #define LOGE(msg, ...) _TGVOIP_W32_LOG_PRINT('E', msg, ##__VA_ARGS__)
  42. #else
  43. #include <stdio.h>
  44. #define _TGVOIP_LOG_PRINT(verb, msg, ...) {printf("%c/tgvoip: " msg "\n", verb, ##__VA_ARGS__); tgvoip_log_file_printf(verb, msg, ##__VA_ARGS__);}
  45. #define LOGV(msg, ...) _TGVOIP_LOG_PRINT('V', msg, ##__VA_ARGS__)
  46. #define LOGD(msg, ...) _TGVOIP_LOG_PRINT('D', msg, ##__VA_ARGS__)
  47. #define LOGI(msg, ...) _TGVOIP_LOG_PRINT('I', msg, ##__VA_ARGS__)
  48. #define LOGW(msg, ...) _TGVOIP_LOG_PRINT('W', msg, ##__VA_ARGS__)
  49. #define LOGE(msg, ...) _TGVOIP_LOG_PRINT('E', msg, ##__VA_ARGS__)
  50. #endif
  51. #if !defined(snprintf) && defined(_WIN32) && defined(__cplusplus_winrt)
  52. #define snprintf _snprintf
  53. #endif
  54. #ifdef TGVOIP_LOG_VERBOSITY
  55. #if TGVOIP_LOG_VERBOSITY<5
  56. #undef LOGV
  57. #define LOGV(msg, ...)
  58. #endif
  59. #if TGVOIP_LOG_VERBOSITY<4
  60. #undef LOGD
  61. #define LOGD(msg, ...)
  62. #endif
  63. #if TGVOIP_LOG_VERBOSITY<3
  64. #undef LOGI
  65. #define LOGI(msg, ...)
  66. #endif
  67. #if TGVOIP_LOG_VERBOSITY<2
  68. #undef LOGW
  69. #define LOGW(msg, ...)
  70. #endif
  71. #if TGVOIP_LOG_VERBOSITY<1
  72. #undef LOGE
  73. #define LOGE(msg, ...)
  74. #endif
  75. #endif
  76. #endif //__LOGGING_H