2
0
Fork 0
lighttpd2/include/lighttpd/angel_log.h

84 lines
2.7 KiB
C

#ifndef _LIGHTTPD_ANGEL_LOG_H_
#define _LIGHTTPD_ANGEL_LOG_H_
#ifndef _LIGHTTPD_ANGEL_BASE_H_
#error Please include <lighttpd/angel_base.h> instead of this file
#endif
/* #include <lighttpd/valgrind/valgrind.h> */
#define SEGFAULT(srv, fmt, ...) \
do { \
li_log_write_(srv, LI_LOG_LEVEL_ABORT, LI_LOG_FLAG_TIMESTAMP, "(crashing) %s.%d: "fmt, LI_REMOVE_PATH(__FILE__), __LINE__, __VA_ARGS__); \
/* VALGRIND_PRINTF_BACKTRACE(fmt, __VA_ARGS__); */\
abort();\
} while(0)
#define ERROR(srv, fmt, ...) \
li_log_write(srv, LI_LOG_LEVEL_ERROR, LI_LOG_FLAG_TIMESTAMP, "error (%s:%d): "fmt, LI_REMOVE_PATH(__FILE__), __LINE__, __VA_ARGS__)
#define WARNING(srv, fmt, ...) \
li_log_write(srv, LI_LOG_LEVEL_WARNING, LI_LOG_FLAG_TIMESTAMP, "warning (%s:%d): "fmt, LI_REMOVE_PATH(__FILE__), __LINE__, __VA_ARGS__)
#define INFO(srv, fmt, ...) \
li_log_write(srv, LI_LOG_LEVEL_INFO, LI_LOG_FLAG_TIMESTAMP, "info (%s:%d): "fmt, LI_REMOVE_PATH(__FILE__), __LINE__, __VA_ARGS__)
#define DEBUG(srv, fmt, ...) \
li_log_write(srv, LI_LOG_LEVEL_DEBUG, LI_LOG_FLAG_TIMESTAMP, "debug (%s:%d): "fmt, LI_REMOVE_PATH(__FILE__), __LINE__, __VA_ARGS__)
/* log messages from lighty always as ERROR */
#define INSTANCE(srv, inst, msg) \
li_log_write(srv, LI_LOG_LEVEL_ERROR, LI_LOG_FLAG_TIMESTAMP, "lighttpd[%d]: %s", (int) inst->pid, msg)
#define GERROR(srv, error, fmt, ...) \
li_log_write(srv, LI_LOG_LEVEL_ERROR, LI_LOG_FLAG_TIMESTAMP, "error (%s:%d): " fmt "\n %s", LI_REMOVE_PATH(__FILE__), __LINE__, __VA_ARGS__, error ? error->message : "Empty GError")
#define BACKEND_LINES(srv, txt, ...) \
li_log_split_lines_(srv, LI_LOG_LEVEL_INFO, LI_LOG_FLAG_TIMESTAMP, txt, __VA_ARGS__)
typedef enum {
LI_LOG_LEVEL_DEBUG,
LI_LOG_LEVEL_INFO,
LI_LOG_LEVEL_WARNING,
LI_LOG_LEVEL_ERROR,
LI_LOG_LEVEL_ABORT
} liLogLevel;
#define LI_LOG_LEVEL_COUNT (LI_LOG_LEVEL_ABORT+1)
typedef enum {
LI_LOG_TYPE_STDERR,
LI_LOG_TYPE_FILE,
LI_LOG_TYPE_PIPE,
LI_LOG_TYPE_SYSLOG,
LI_LOG_TYPE_NONE
} liLogType;
#define LI_LOG_FLAG_NONE (0x0) /* default flag */
#define LI_LOG_FLAG_TIMESTAMP (0x1) /* prepend a timestamp to the log message */
typedef struct liLog liLog;
struct liLog {
liLogType type;
gboolean levels[LI_LOG_LEVEL_COUNT];
GString *path;
gint fd;
time_t last_ts;
GString *ts_cache;
GString *log_line;
};
void log_init(liServer *srv);
void log_clean(liServer *srv);
LI_API void li_log_write(liServer *srv, liLogLevel log_level, guint flags, const gchar *fmt, ...) G_GNUC_PRINTF(4, 5);
/* replaces '\r' and '\n' with '\0' */
LI_API void li_log_split_lines(liServer *srv, liLogLevel log_level, guint flags, gchar *txt, const gchar *prefix);
LI_API void li_log_split_lines_(liServer *srv, liLogLevel log_level, guint flags, gchar *txt, const gchar *fmt, ...) G_GNUC_PRINTF(5, 6);
#endif