logging.h 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #ifndef LOGGING_H
  2. #define LOGGING_H
  3. #include <stdio.h>
  4. #ifdef __GNUC__
  5. #define DECL_FORMAT(x, y, z) __attribute__((format(x, (y), (z))))
  6. #else
  7. #define DECL_FORMAT(x, y, z)
  8. #endif
  9. #ifdef __cplusplus
  10. extern "C" {
  11. #endif
  12. extern FILE *LogFile;
  13. #if defined(__GNUC__) && !defined(_WIN32)
  14. #define AL_PRINT(T, MSG, ...) fprintf(LogFile, "AL lib: %s %s: "MSG, T, __FUNCTION__ , ## __VA_ARGS__)
  15. #else
  16. void al_print(const char *type, const char *func, const char *fmt, ...) DECL_FORMAT(printf, 3,4);
  17. #define AL_PRINT(T, ...) al_print((T), __FUNCTION__, __VA_ARGS__)
  18. #endif
  19. #ifdef __ANDROID__
  20. #include <android/log.h>
  21. #define LOG_ANDROID(T, MSG, ...) __android_log_print(T, "openal", "AL lib: %s: "MSG, __FUNCTION__ , ## __VA_ARGS__)
  22. #else
  23. #define LOG_ANDROID(T, MSG, ...) ((void)0)
  24. #endif
  25. enum LogLevel {
  26. NoLog,
  27. LogError,
  28. LogWarning,
  29. LogTrace,
  30. LogRef
  31. };
  32. extern enum LogLevel LogLevel;
  33. #define TRACEREF(...) do { \
  34. if(LogLevel >= LogRef) \
  35. AL_PRINT("(--)", __VA_ARGS__); \
  36. } while(0)
  37. #define TRACE(...) do { \
  38. if(LogLevel >= LogTrace) \
  39. AL_PRINT("(II)", __VA_ARGS__); \
  40. LOG_ANDROID(ANDROID_LOG_DEBUG, __VA_ARGS__); \
  41. } while(0)
  42. #define WARN(...) do { \
  43. if(LogLevel >= LogWarning) \
  44. AL_PRINT("(WW)", __VA_ARGS__); \
  45. LOG_ANDROID(ANDROID_LOG_WARN, __VA_ARGS__); \
  46. } while(0)
  47. #define ERR(...) do { \
  48. if(LogLevel >= LogError) \
  49. AL_PRINT("(EE)", __VA_ARGS__); \
  50. LOG_ANDROID(ANDROID_LOG_ERROR, __VA_ARGS__); \
  51. } while(0)
  52. #ifdef __cplusplus
  53. } /* extern "C" */
  54. #endif
  55. #endif /* LOGGING_H */