Files
sysbench/src/sb_logger.h
2017-01-29 19:32:14 +03:00

154 lines
4.0 KiB
C

/* Copyright (C) 2004 MySQL AB
Copyright (C) 2004-2016 Alexey Kopytov <akopytov@gmail.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef SB_LOGGER_H
#define SB_LOGGER_H
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#ifdef HAVE_PTHREAD_H
# include <pthread.h>
#endif
#include "sb_util.h"
#include "sb_options.h"
#include "sb_timer.h"
#include "sb_histogram.h"
/* Text message flags (used in the 'flags' field of log_text_msg_t) */
#define LOG_MSG_TEXT_ALLOW_DUPLICATES 1
/* Message types definition */
typedef enum {
LOG_MSG_TYPE_MIN, /* used for internal purposes */
LOG_MSG_TYPE_TEXT, /* arbitrary text messages */
LOG_MSG_TYPE_OPER, /* operation start/stop messages */
LOG_MSG_TYPE_MAX /* used for internal purposes */
} log_msg_type_t;
/* Message priorities definition */
typedef enum {
LOG_FATAL, /* system is unusable */
LOG_ALERT, /* user actions must be taken */
LOG_WARNING, /* warnings */
LOG_NOTICE, /* normal but significant messages */
LOG_INFO, /* informational messages */
LOG_DEBUG, /* debug-level messages */
LOG_MAX /* used for internal purposes */
} log_msg_priority_t;
/* Text message definition */
typedef struct {
log_msg_priority_t priority;
char *text;
unsigned int flags;
} log_msg_text_t;
/* Operation start/stop message definition */
typedef enum {
LOG_MSG_OPER_START,
LOG_MSG_OPER_STOP
} log_msg_oper_action_t;
typedef struct {
log_msg_oper_action_t action;
int thread_id;
} log_msg_oper_t;
/* General log message definition */
typedef struct {
log_msg_type_t type;
void *data;
} log_msg_t;
/* Log handler operations definition */
typedef int log_op_register(void); /* register handler options */
typedef int log_op_init(void); /* initialize log handler */
typedef int log_op_process(log_msg_t *msg); /* process message */
typedef int log_op_done(void); /* uninitialize log handler */
/* Log handler operations structure */
typedef struct {
log_op_init *init;
log_op_process *process;
log_op_done *done;
} log_handler_ops_t;
/* Log handler definition */
typedef struct {
log_handler_ops_t ops; /* handler operations */
sb_arg_t *args; /* handler arguments */
sb_list_item_t listitem; /* can be linked in a list */
} log_handler_t;
/* Register logger */
int log_register(void);
/* Display command line options for all register log handlers */
void log_print_help(void);
/* Initialize logger */
int log_init(void);
/* Add handler for a specified type of messages */
int log_add_handler(log_msg_type_t type, log_handler_t *handler);
/* Main function to dispatch log messages */
void log_msg(log_msg_t *);
/* printf-like wrapper to log text messages */
void log_text(log_msg_priority_t priority, const char *fmt, ...)
SB_ATTRIBUTE_FORMAT(printf, 2, 3);
/*
variant of log_text() which prepends log lines with a elapsed time of the
specified timer.
*/
void log_timestamp(log_msg_priority_t priority, double seconds,
const char *fmt, ...)
SB_ATTRIBUTE_FORMAT(printf, 3, 4);
/* printf-like wrapper to log system error messages */
void log_errno(log_msg_priority_t priority, const char *fmt, ...)
SB_ATTRIBUTE_FORMAT(printf, 2, 3);
/* Uninitialize logger */
void log_done(void);
#endif /* SB_LOGGER_H */