/* * syslog.h * * * Copyright 2015 Susi's Strolch * * For license information see projects "License.txt" * * part of syslog.c - client library * */ #ifndef _SYSLOG_H #define _SYSLOG_H #ifdef __cplusplus extern "C" { #endif enum syslog_state { SYSLOG_NONE, // not initialized SYSLOG_WAIT, // initialized, waiting for Wifi SYSLOG_READY, // Wifi established, ready to send SYSLOG_SENDING, // UDP package on the air SYSLOG_HALTED, // heap full, discard message SYSLOG_ERROR, }; enum syslog_priority { SYSLOG_PRIO_EMERG, /* system is unusable */ SYSLOG_PRIO_ALERT, /* action must be taken immediately */ SYSLOG_PRIO_CRIT, /* critical conditions */ SYSLOG_PRIO_ERR, /* error conditions */ SYSLOG_PRIO_WARNING, /* warning conditions */ SYSLOG_PRIO_NOTICE, /* normal but significant condition */ SYSLOG_PRIO_INFO, /* informational */ SYSLOG_PRIO_DEBUG, /* debug-level messages */ }; enum syslog_facility { SYSLOG_FAC_KERN, /* kernel messages */ SYSLOG_FAC_USER, /* random user-level messages */ SYSLOG_FAC_MAIL, /* mail system */ SYSLOG_FAC_DAEMON, /* system daemons */ SYSLOG_FAC_AUTH, /* security/authorization messages */ SYSLOG_FAC_SYSLOG, /* messages generated internally by syslogd */ SYSLOG_FAC_LPR, /* line printer subsystem */ SYSLOG_FAC_NEWS, /* network news subsystem */ SYSLOG_FAC_UUCP, /* UUCP subsystem */ SYSLOG_FAC_CRON, /* clock daemon */ SYSLOG_FAC_AUTHPRIV,/* security/authorization messages (private) */ SYSLOG_FAC_FTP, /* ftp daemon */ SYSLOG_FAC_LOCAL0, /* reserved for local use */ SYSLOG_FAC_LOCAL1, /* reserved for local use */ SYSLOG_FAC_LOCAL2, /* reserved for local use */ SYSLOG_FAC_LOCAL3, /* reserved for local use */ SYSLOG_FAC_LOCAL4, /* reserved for local use */ SYSLOG_FAC_LOCAL5, /* reserved for local use */ SYSLOG_FAC_LOCAL6, /* reserved for local use */ SYSLOG_FAC_LOCAL7, /* reserved for local use */ }; #define MINIMUM_HEAP_SIZE 8192 #define REG_READ(_r) (*(volatile uint32 *)(_r)) #define WDEV_NOW() REG_READ(0x3ff20c00) extern uint32_t realtime_stamp; // 1sec NTP ticker typedef struct syslog_host_t syslog_host_t; struct syslog_host_t { uint32_t min_heap_size; // minimum allowed heap size when buffering ip_addr_t addr; uint16_t port; }; // buffered syslog event - f.e. if network stack isn't up and running typedef struct syslog_entry_t syslog_entry_t; struct syslog_entry_t { syslog_entry_t *next; uint16_t datagram_len; char datagram[]; }; syslog_host_t syslogserver; void ICACHE_FLASH_ATTR syslog_init(char *syslog_host); void ICACHE_FLASH_ATTR syslog(uint8_t facility, uint8_t severity, const char tag[], const char message[], ...); // some convenience macros #ifdef SYSLOG // extern char *esp_link_version; // in user_main.c #define LOG_DEBUG(format, ...) syslog(SYSLOG_FAC_USER, SYSLOG_PRIO_DEBUG, "esp_link", format, ## __VA_ARGS__ ) #define LOG_NOTICE(format, ...) syslog(SYSLOG_FAC_USER, SYSLOG_PRIO_NOTICE, "esp_link", format, ## __VA_ARGS__ ) #define LOG_INFO(format, ...) syslog(SYSLOG_FAC_USER, SYSLOG_PRIO_INFO, "esp_link", format, ## __VA_ARGS__ ) #define LOG_WARN(format, ...) syslog(SYSLOG_FAC_USER, SYSLOG_PRIO_WARNING, "esp_link", format, ## __VA_ARGS__ ) #define LOG_ERR(format, ...) syslog(SYSLOG_FAC_USER, SYSLOG_PRIO_ERR, "esp_link", format, ## __VA_ARGS__ ) #else #define LOG_DEBUG(format, ...) do { } while(0) #define LOG_NOTICE(format, ...) do { } while(0) #define LOG_WARN(format, ...) do { } while(0) #define LOG_INFO(format, ...) do { } while(0) #define LOG_ERR(format, ...) do { } while(0) #endif #ifdef __cplusplus } #endif #endif /* _SYSLOG_H */