summaryrefslogtreecommitdiff
path: root/toxcore/logger.h
diff options
context:
space:
mode:
Diffstat (limited to 'toxcore/logger.h')
-rw-r--r--toxcore/logger.h99
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
32typedef 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 */
42int logger_init(const char *file_name, LoggerLevel level);
43const char *logger_stringify_level(LoggerLevel level);
44unsigned logger_get_pid();
45void logger_write (LoggerLevel level, const char *format, ...);
46char *logger_timestr (char *dest, size_t max_size);
47char *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 */ 38typedef 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); 46typedef 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 */
51logger *logger_new (const char *file_name, LOG_LEVEL level, const char *id);
71 52
72#else 53void logger_kill (logger *log);
54void logger_kill_global (void);
73 55
56/**
57 * Global logger setter and getter.
58 */
59void logger_set_global (logger *log);
60logger *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) 65void 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 */