#include <syslog.h>
#include <stdint.h>
+#include <stdbool.h>
#include <stdio.h>
/* Here is some guidance on logging levels to use:
to that logging destination. */
#define ZLOG_DISABLED (LOG_EMERG-1)
-typedef enum
-{
- ZLOG_DEST_SYSLOG = 0,
- ZLOG_DEST_STDOUT,
- ZLOG_DEST_MONITOR,
- ZLOG_DEST_FILE
+typedef enum {
+ ZLOG_DEST_SYSLOG = 0,
+ ZLOG_DEST_STDOUT,
+ ZLOG_DEST_MONITOR,
+ ZLOG_DEST_FILE
} zlog_dest_t;
#define ZLOG_NUM_DESTS (ZLOG_DEST_FILE+1)
+extern bool zlog_startup_stderr;
+
/* Message structure. */
-struct message
-{
- int key;
- const char *str;
+struct message {
+ int key;
+ const char *str;
};
/* Open zlog function */
-extern void openzlog (const char *progname, const char *protoname,
- uint16_t instance, int syslog_options, int syslog_facility);
+extern void openzlog(const char *progname, const char *protoname,
+ uint16_t instance, int syslog_options,
+ int syslog_facility);
/* Close zlog function. */
-extern void closezlog (void);
+extern void closezlog(void);
/* GCC have printf type attribute check. */
#ifdef __GNUC__
#endif /* __GNUC__ */
/* Handy zlog functions. */
-extern void zlog_err (const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
-extern void zlog_warn (const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
-extern void zlog_info (const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
-extern void zlog_notice (const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
-extern void zlog_debug (const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
+extern void zlog_err(const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
+extern void zlog_warn(const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
+extern void zlog_info(const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
+extern void zlog_notice(const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
+extern void zlog_debug(const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
+
+/* For logs which have error codes associated with them */
+#define flog_err(ferr_id, format, ...) \
+ zlog_err("[EC %"PRIu32"] " format, ferr_id, ##__VA_ARGS__)
+#define flog_err_sys(ferr_id, format, ...) \
+ flog_err(ferr_id, format, ##__VA_ARGS__)
+#define flog_warn(ferr_id, format, ...) \
+ zlog_warn("[EC %"PRIu32"] " format, ferr_id, ##__VA_ARGS__)
-extern void zlog_thread_info (int log_level);
+
+extern void zlog_thread_info(int log_level);
/* Set logging level for the given destination. If the log_level
argument is ZLOG_DISABLED, then the destination is disabled.
This function should not be used for file logging (use zlog_set_file
or zlog_reset_file instead). */
-extern void zlog_set_level (zlog_dest_t, int log_level);
+extern void zlog_set_level(zlog_dest_t, int log_level);
/* Set logging to the given filename at the specified level. */
-extern int zlog_set_file (const char *filename, int log_level);
+extern int zlog_set_file(const char *filename, int log_level);
/* Disable file logging. */
-extern int zlog_reset_file (void);
+extern int zlog_reset_file(void);
/* Rotate log. */
-extern int zlog_rotate (void);
-
-/* For hackey message lookup and check */
-#define LOOKUP_DEF(x, y, def) mes_lookup(x, x ## _max, y, def, #x)
-#define LOOKUP(x, y) LOOKUP_DEF(x, y, "(no item found)")
+extern int zlog_rotate(void);
-extern const char *lookup (const struct message *, int);
-extern const char *mes_lookup (const struct message *meslist,
- int max, int index,
- const char *no_item, const char *mesname);
+const char *lookup_msg(const struct message *mz, int kz, const char *nf);
/* Safe version of strerror -- never returns NULL. */
extern const char *safe_strerror(int errnum);
/* To be called when a fatal signal is caught. */
extern void zlog_signal(int signo, const char *action
#ifdef SA_SIGINFO
- , siginfo_t *siginfo, void *program_counter
+ ,
+ siginfo_t *siginfo, void *program_counter
#endif
- );
+ );
/* Log a backtrace. */
extern void zlog_backtrace(int priority);
char *buf, size_t buflen);
extern void zlog_hexdump(const void *mem, unsigned int len);
-extern const char *zlog_sanitize(char *buf, size_t bufsz, const void *in, size_t inlen);
+extern const char *zlog_sanitize(char *buf, size_t bufsz, const void *in,
+ size_t inlen);
-extern int vzlog_test (int priority);
+extern int vzlog_test(int priority);
/* structure useful for avoiding repeated rendering of the same timestamp */
struct timestamp_control {
- size_t len; /* length of rendered timestamp */
- int precision; /* configuration parameter */
- int already_rendered; /* should be initialized to 0 */
- char buf[QUAGGA_TIMESTAMP_LEN]; /* will contain the rendered timestamp */
+ size_t len; /* length of rendered timestamp */
+ int precision; /* configuration parameter */
+ int already_rendered; /* should be initialized to 0 */
+ char buf[QUAGGA_TIMESTAMP_LEN]; /* will contain the rendered timestamp
+ */
};
/* Defines for use in command construction: */
-#define LOG_LEVEL_DESC \
- "System is unusable\n" \
- "Immediate action needed\n" \
- "Critical conditions\n" \
- "Error conditions\n" \
- "Warning conditions\n" \
- "Normal but significant conditions\n" \
- "Informational messages\n" \
- "Debugging messages\n"
-
-#define LOG_FACILITY_DESC \
- "Kernel\n" \
- "User process\n" \
- "Mail system\n" \
- "System daemons\n" \
- "Authorization system\n" \
- "Syslog itself\n" \
- "Line printer system\n" \
- "USENET news\n" \
- "Unix-to-Unix copy system\n" \
- "Cron/at facility\n" \
- "Local use\n" \
- "Local use\n" \
- "Local use\n" \
- "Local use\n" \
- "Local use\n" \
- "Local use\n" \
- "Local use\n" \
- "Local use\n"
+#define LOG_LEVEL_DESC \
+ "System is unusable\n" \
+ "Immediate action needed\n" \
+ "Critical conditions\n" \
+ "Error conditions\n" \
+ "Warning conditions\n" \
+ "Normal but significant conditions\n" \
+ "Informational messages\n" \
+ "Debugging messages\n"
+
+#define LOG_FACILITY_DESC \
+ "Kernel\n" \
+ "User process\n" \
+ "Mail system\n" \
+ "System daemons\n" \
+ "Authorization system\n" \
+ "Syslog itself\n" \
+ "Line printer system\n" \
+ "USENET news\n" \
+ "Unix-to-Unix copy system\n" \
+ "Cron/at facility\n" \
+ "Local use\n" \
+ "Local use\n" \
+ "Local use\n" \
+ "Local use\n" \
+ "Local use\n" \
+ "Local use\n" \
+ "Local use\n" \
+ "Local use\n"
#endif /* _ZEBRA_LOG_H */