You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					69 lines
				
				2.7 KiB
			
		
		
			
		
	
	
					69 lines
				
				2.7 KiB
			| 
								 
											6 years ago
										 
									 | 
							
								#ifndef SWAGLOG_H
							 | 
						||
| 
								 | 
							
								#define SWAGLOG_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "selfdrive/common/timing.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define CLOUDLOG_DEBUG 10
							 | 
						||
| 
								 | 
							
								#define CLOUDLOG_INFO 20
							 | 
						||
| 
								 | 
							
								#define CLOUDLOG_WARNING 30
							 | 
						||
| 
								 | 
							
								#define CLOUDLOG_ERROR 40
							 | 
						||
| 
								 | 
							
								#define CLOUDLOG_CRITICAL 50
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								extern "C" {
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void cloudlog_e(int levelnum, const char* filename, int lineno, const char* func,
							 | 
						||
| 
								 | 
							
								                const char* fmt, ...) /*__attribute__ ((format (printf, 6, 7)))*/;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void cloudlog_bind(const char* k, const char* v);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define cloudlog(lvl, fmt, ...) cloudlog_e(lvl, __FILE__, __LINE__, \
							 | 
						||
| 
								 | 
							
								                                           __func__, \
							 | 
						||
| 
								 | 
							
								                                           fmt, ## __VA_ARGS__)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define cloudlog_rl(burst, millis, lvl, fmt, ...)   \
							 | 
						||
| 
								 | 
							
								{                                                   \
							 | 
						||
| 
								 | 
							
								  static uint64_t __begin = 0;                      \
							 | 
						||
| 
								 | 
							
								  static int __printed = 0;                         \
							 | 
						||
| 
								 | 
							
								  static int __missed = 0;                          \
							 | 
						||
| 
								 | 
							
								                                                    \
							 | 
						||
| 
								 | 
							
								  int __burst = (burst);                            \
							 | 
						||
| 
								 | 
							
								  int __millis = (millis);                          \
							 | 
						||
| 
								 | 
							
								  uint64_t __ts = nanos_since_boot();               \
							 | 
						||
| 
								 | 
							
								                                                    \
							 | 
						||
| 
								 | 
							
								  if (!__begin) __begin = __ts;                     \
							 | 
						||
| 
								 | 
							
								                                                    \
							 | 
						||
| 
								 | 
							
								  if (__begin + __millis*1000000ULL < __ts) {       \
							 | 
						||
| 
								 | 
							
								    if (__missed) {                                 \
							 | 
						||
| 
								 | 
							
								      cloudlog(CLOUDLOG_WARNING, "cloudlog: %d messages supressed", __missed); \
							 | 
						||
| 
								 | 
							
								    }                                               \
							 | 
						||
| 
								 | 
							
								    __begin = 0;                                    \
							 | 
						||
| 
								 | 
							
								    __printed = 0;                                  \
							 | 
						||
| 
								 | 
							
								    __missed = 0;                                   \
							 | 
						||
| 
								 | 
							
								  }                                                 \
							 | 
						||
| 
								 | 
							
								                                                    \
							 | 
						||
| 
								 | 
							
								  if (__printed < __burst) {                        \
							 | 
						||
| 
								 | 
							
								    cloudlog(lvl, fmt, ## __VA_ARGS__);             \
							 | 
						||
| 
								 | 
							
								    __printed++;                                    \
							 | 
						||
| 
								 | 
							
								  } else {                                          \
							 | 
						||
| 
								 | 
							
								    __missed++;                                     \
							 | 
						||
| 
								 | 
							
								  }                                                 \
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define LOGD(fmt, ...) cloudlog(CLOUDLOG_DEBUG, fmt, ## __VA_ARGS__)
							 | 
						||
| 
								 | 
							
								#define LOG(fmt, ...) cloudlog(CLOUDLOG_INFO, fmt, ## __VA_ARGS__)
							 | 
						||
| 
								 | 
							
								#define LOGW(fmt, ...) cloudlog(CLOUDLOG_WARNING, fmt, ## __VA_ARGS__)
							 | 
						||
| 
								 | 
							
								#define LOGE(fmt, ...) cloudlog(CLOUDLOG_ERROR, fmt, ## __VA_ARGS__)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define LOGD_100(fmt, ...) cloudlog_rl(2, 100, CLOUDLOG_DEBUG, fmt, ## __VA_ARGS__)
							 | 
						||
| 
								 | 
							
								#define LOG_100(fmt, ...) cloudlog_rl(2, 100, CLOUDLOG_INFO, fmt, ## __VA_ARGS__)
							 | 
						||
| 
								 | 
							
								#define LOGW_100(fmt, ...) cloudlog_rl(2, 100, CLOUDLOG_WARNING, fmt, ## __VA_ARGS__)
							 | 
						||
| 
								 | 
							
								#define LOGE_100(fmt, ...) cloudlog_rl(2, 100, CLOUDLOG_ERROR, fmt, ## __VA_ARGS__)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |