diff options
Diffstat (limited to 'libnetdata/log/log.h')
-rw-r--r-- | libnetdata/log/log.h | 45 |
1 files changed, 35 insertions, 10 deletions
diff --git a/libnetdata/log/log.h b/libnetdata/log/log.h index ae86720c..11dab4c1 100644 --- a/libnetdata/log/log.h +++ b/libnetdata/log/log.h @@ -45,6 +45,8 @@ extern "C" { #define D_ACLK 0x0000000200000000 #define D_METADATALOG 0x0000000400000000 #define D_ACLK_SYNC 0x0000000800000000 +#define D_META_SYNC 0x0000001000000000 +#define D_REPLICATION 0x0000002000000000 #define D_SYSTEM 0x8000000000000000 extern int web_server_is_multithreaded; @@ -56,9 +58,13 @@ extern const char *program_name; extern int stdaccess_fd; extern FILE *stdaccess; +extern int stdhealth_fd; +extern FILE *stdhealth; + extern const char *stdaccess_filename; extern const char *stderr_filename; extern const char *stdout_filename; +extern const char *stdhealth_filename; extern const char *facility_log; #ifdef ENABLE_ACLK @@ -71,42 +77,61 @@ extern int aclklog_enabled; extern int access_log_syslog; extern int error_log_syslog; extern int output_log_syslog; +extern int health_log_syslog; extern time_t error_log_throttle_period; extern unsigned long error_log_errors_per_period, error_log_errors_per_period_backup; -extern int error_log_limit(int reset); +int error_log_limit(int reset); + +void open_all_log_files(); +void reopen_all_log_files(); -extern void open_all_log_files(); -extern void reopen_all_log_files(); +#define LOG_DATE_LENGTH 26 +void log_date(char *buffer, size_t len, time_t now); static inline void debug_dummy(void) {} void error_log_limit_reset(void); void error_log_limit_unlimited(void); +typedef struct error_with_limit { + time_t log_every; + size_t count; + time_t last_logged; + usec_t sleep_ut; +} ERROR_LIMIT; + +#define error_limit_static_global_var(var, log_every_secs, sleep_usecs) static ERROR_LIMIT var = { .last_logged = 0, .count = 0, .log_every = (log_every_secs), .sleep_ut = (sleep_usecs) } +#define error_limit_static_thread_var(var, log_every_secs, sleep_usecs) static __thread ERROR_LIMIT var = { .last_logged = 0, .count = 0, .log_every = (log_every_secs), .sleep_ut = (sleep_usecs) } + #ifdef NETDATA_INTERNAL_CHECKS #define debug(type, args...) do { if(unlikely(debug_flags & type)) debug_int(__FILE__, __FUNCTION__, __LINE__, ##args); } while(0) #define internal_error(condition, args...) do { if(unlikely(condition)) error_int("IERR", __FILE__, __FUNCTION__, __LINE__, ##args); } while(0) +#define internal_fatal(condition, args...) do { if(unlikely(condition)) fatal_int(__FILE__, __FUNCTION__, __LINE__, ##args); } while(0) #else #define debug(type, args...) debug_dummy() #define internal_error(args...) debug_dummy() +#define internal_fatal(args...) debug_dummy() #endif #define info(args...) info_int(__FILE__, __FUNCTION__, __LINE__, ##args) #define infoerr(args...) error_int("INFO", __FILE__, __FUNCTION__, __LINE__, ##args) #define error(args...) error_int("ERROR", __FILE__, __FUNCTION__, __LINE__, ##args) +#define error_limit(erl, args...) error_limit_int(erl, "ERROR", __FILE__, __FUNCTION__, __LINE__, ##args) #define fatal(args...) fatal_int(__FILE__, __FUNCTION__, __LINE__, ##args) #define fatal_assert(expr) ((expr) ? (void)(0) : fatal_int(__FILE__, __FUNCTION__, __LINE__, "Assertion `%s' failed", #expr)) -extern void send_statistics(const char *action, const char *action_result, const char *action_data); -extern void debug_int( const char *file, const char *function, const unsigned long line, const char *fmt, ... ) PRINTFLIKE(4, 5); -extern void info_int( const char *file, const char *function, const unsigned long line, const char *fmt, ... ) PRINTFLIKE(4, 5); -extern void error_int( const char *prefix, const char *file, const char *function, const unsigned long line, const char *fmt, ... ) PRINTFLIKE(5, 6); -extern void fatal_int( const char *file, const char *function, const unsigned long line, const char *fmt, ... ) NORETURN PRINTFLIKE(4, 5); -extern void log_access( const char *fmt, ... ) PRINTFLIKE(1, 2); +void send_statistics(const char *action, const char *action_result, const char *action_data); +void debug_int( const char *file, const char *function, const unsigned long line, const char *fmt, ... ) PRINTFLIKE(4, 5); +void info_int( const char *file, const char *function, const unsigned long line, const char *fmt, ... ) PRINTFLIKE(4, 5); +void error_int( const char *prefix, const char *file, const char *function, const unsigned long line, const char *fmt, ... ) PRINTFLIKE(5, 6); +void error_limit_int(ERROR_LIMIT *erl, const char *prefix, const char *file __maybe_unused, const char *function __maybe_unused, unsigned long line __maybe_unused, const char *fmt, ... ) PRINTFLIKE(6, 7);; +void fatal_int( const char *file, const char *function, const unsigned long line, const char *fmt, ... ) NORETURN PRINTFLIKE(4, 5); +void log_access( const char *fmt, ... ) PRINTFLIKE(1, 2); +void log_health( const char *fmt, ... ) PRINTFLIKE(1, 2); #ifdef ENABLE_ACLK -extern void log_aclk_message_bin( const char *data, const size_t data_len, int tx, const char *mqtt_topic, const char *message_name); +void log_aclk_message_bin( const char *data, const size_t data_len, int tx, const char *mqtt_topic, const char *message_name); #endif # ifdef __cplusplus |