diff options
Diffstat (limited to 'toxcore/logger.h')
-rw-r--r-- | toxcore/logger.h | 99 |
1 files changed, 52 insertions, 47 deletions
diff --git a/toxcore/logger.h b/toxcore/logger.h index 856c48d0..6f1f6075 100644 --- a/toxcore/logger.h +++ b/toxcore/logger.h | |||
@@ -1,7 +1,5 @@ | |||
1 | /* logger.h | 1 | /* logger.h |
2 | * | 2 | * |
3 | * Wrapping logger functions in nice macros | ||
4 | * | ||
5 | * Copyright (C) 2013 Tox project All Rights Reserved. | 3 | * Copyright (C) 2013 Tox project All Rights Reserved. |
6 | * | 4 | * |
7 | * This file is part of Tox. | 5 | * This file is part of Tox. |
@@ -22,67 +20,74 @@ | |||
22 | */ | 20 | */ |
23 | 21 | ||
24 | 22 | ||
25 | #ifndef __TOXLOGGER | 23 | #ifndef TOXLOGGER_H |
26 | #define __TOXLOGGER | 24 | #define TOXLOGGER_H |
27 | 25 | ||
28 | #include <string.h> | 26 | #include <string.h> |
29 | 27 | ||
30 | #ifdef LOGGING | 28 | /* In case these are undefined; define 'empty' */ |
31 | 29 | #ifndef LOGGER_OUTPUT_FILE | |
32 | typedef enum _LoggerLevel { | 30 | # define LOGGER_OUTPUT_FILE "" |
33 | INFO, | 31 | #endif |
34 | DEBUG, | ||
35 | WARNING, | ||
36 | ERROR | ||
37 | } LoggerLevel; | ||
38 | 32 | ||
39 | /* | 33 | #ifndef LOGGER_LEVEL |
40 | * Set 'level' as the lowest printable level | 34 | # define LOGGER_LEVEL LOG_ERROR |
41 | */ | ||
42 | int logger_init(const char *file_name, LoggerLevel level); | ||
43 | const char *logger_stringify_level(LoggerLevel level); | ||
44 | unsigned logger_get_pid(); | ||
45 | void logger_write (LoggerLevel level, const char *format, ...); | ||
46 | char *logger_timestr (char *dest, size_t max_size); | ||
47 | char *logger_posstr (char *dest, size_t max_size, const char *file, int line); | ||
48 | |||
49 | #if defined(_WIN32) || defined(__WIN32__) || defined (WIN32) | ||
50 | #define _SFILE (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__) | ||
51 | #else | ||
52 | #define _SFILE (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) | ||
53 | #endif | 35 | #endif |
54 | 36 | ||
55 | #define LFORMAT "\n%-15s %-7u %-5s %-20s - %s" | ||
56 | #define WRITE_FORMAT(__LEVEL__, __WHAT__) \ | ||
57 | char __time__[15]; char posstr[200]; char the_str [4096]; \ | ||
58 | snprintf(the_str, 4096, LFORMAT, logger_timestr(__time__, 15), logger_get_pid(), \ | ||
59 | logger_stringify_level(__LEVEL__), logger_posstr(posstr, 200, _SFILE, __LINE__), __WHAT__) | ||
60 | 37 | ||
61 | /* Use these macros */ | 38 | typedef enum { |
39 | LOG_TRACE, | ||
40 | LOG_DEBUG, | ||
41 | LOG_INFO, | ||
42 | LOG_WARNING, | ||
43 | LOG_ERROR | ||
44 | } LOG_LEVEL; | ||
62 | 45 | ||
63 | #define LOGGER_INIT(name, level) logger_init(name, level); | 46 | typedef struct logger logger; |
64 | #define LOGGER_INFO(format, ...) do { WRITE_FORMAT(INFO, format); logger_write( INFO, the_str, ##__VA_ARGS__ ); } while (0) | ||
65 | #define LOGGER_DEBUG(format, ...) do { WRITE_FORMAT(DEBUG, format); logger_write( DEBUG, the_str, ##__VA_ARGS__ ); } while (0) | ||
66 | #define LOGGER_WARNING(format, ...) do { WRITE_FORMAT(WARNING, format); logger_write( WARNING, the_str, ##__VA_ARGS__ ); } while (0) | ||
67 | #define LOGGER_ERROR(format, ...) do { WRITE_FORMAT(ERROR, format); logger_write( ERROR, the_str, ##__VA_ARGS__ ); } while (0) | ||
68 | 47 | ||
69 | /* To do some checks or similar only when logging use this */ | 48 | /** |
70 | #define LOGGER_SCOPE(__SCOPE_DO__) do { __SCOPE_DO__ } while(0) | 49 | * Set 'level' as the lowest printable level. If id == NULL, random number is used. |
50 | */ | ||
51 | logger *logger_new (const char *file_name, LOG_LEVEL level, const char *id); | ||
71 | 52 | ||
72 | #else | 53 | void logger_kill (logger *log); |
54 | void logger_kill_global (void); | ||
73 | 55 | ||
56 | /** | ||
57 | * Global logger setter and getter. | ||
58 | */ | ||
59 | void logger_set_global (logger *log); | ||
60 | logger *logger_get_global (void); | ||
74 | 61 | ||
75 | #define LOGGER_INIT(name, level) do {} while(0) | 62 | /** |
76 | #define LOGGER_INFO(format, ...) do {} while(0) | 63 | * Main write function. If logging disabled does nothing. If log == NULL uses global logger. |
77 | #define LOGGER_DEBUG(format, ...) do {} while(0) | 64 | */ |
78 | #define LOGGER_WARNING(format, ...) do {} while(0) | 65 | void logger_write (logger *log, LOG_LEVEL level, const char *file, int line, const char *format, ...); |
79 | #define LOGGER_ERROR(format, ...) do {} while(0) | ||
80 | 66 | ||
81 | #define LOGGER_SCOPE(__SCOPE_DO__) do {} while(0) | ||
82 | 67 | ||
68 | /* To do some checks or similar only when logging, use this */ | ||
69 | #ifdef LOGGING | ||
70 | # define LOGGER_SCOPE(__SCOPE_DO__) do { __SCOPE_DO__ } while(0) | ||
71 | # define LOGGER_WRITE(log, level, format, ...) \ | ||
72 | logger_write(log, level, __FILE__, __LINE__, format, ##__VA_ARGS__ ) | ||
73 | #else | ||
74 | # define LOGGER_SCOPE(__SCOPE_DO__) do {} while(0) | ||
75 | # define LOGGER_WRITE(log, level, format, ...) do {} while(0) | ||
83 | #endif /* LOGGING */ | 76 | #endif /* LOGGING */ |
84 | 77 | ||
78 | /* To log with an logger */ | ||
79 | #define LOGGER_TRACE_(log, format, ...) LOGGER_WRITE(log, LOG_TRACE, format, ##__VA_ARGS__ ) | ||
80 | #define LOGGER_DEBUG_(log, format, ...) LOGGER_WRITE(log, LOG_DEBUG, format, ##__VA_ARGS__ ) | ||
81 | #define LOGGER_INFO_(log, format, ...) LOGGER_WRITE(log, LOG_INFO, format, ##__VA_ARGS__ ) | ||
82 | #define LOGGER_WARNING_(log, format, ...) LOGGER_WRITE(log, LOG_WARNING, format, ##__VA_ARGS__ ) | ||
83 | #define LOGGER_ERROR_(log, format, ...) LOGGER_WRITE(log, LOG_ERROR, format, ##__VA_ARGS__ ) | ||
85 | 84 | ||
85 | /* To log with the global logger */ | ||
86 | #define LOGGER_TRACE(format, ...) LOGGER_TRACE_(NULL, format, ##__VA_ARGS__) | ||
87 | #define LOGGER_DEBUG(format, ...) LOGGER_DEBUG_(NULL, format, ##__VA_ARGS__) | ||
88 | #define LOGGER_INFO(format, ...) LOGGER_INFO_(NULL, format, ##__VA_ARGS__) | ||
89 | #define LOGGER_WARNING(format, ...) LOGGER_WARNING_(NULL, format, ##__VA_ARGS__) | ||
90 | #define LOGGER_ERROR(format, ...) LOGGER_ERROR_(NULL, format, ##__VA_ARGS__) | ||
86 | 91 | ||
87 | 92 | ||
88 | #endif /* __TOXLOGGER */ | 93 | #endif /* TOXLOGGER_H */ |