logsys: port to new packed rec_ident version

git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@2250 fd59a12c-fef9-0310-b244-a6a79926bd2f
This commit is contained in:
Fabio M. Di Nitto 2009-06-18 05:32:56 +00:00
parent 924b967ac4
commit 6d5ce092a1
10 changed files with 164 additions and 146 deletions

View File

@ -414,12 +414,10 @@ static inline int strcpy_cutoff (char *dest, const char *src, size_t cutoff,
* any number between % and character specify field length to pad or chop
*/
static void log_printf_to_logs (
const char *subsys,
unsigned int rec_ident,
const char *file_name,
const char *function_name,
int file_line,
unsigned int level,
unsigned int rec_ident,
const char *buffer)
{
char normal_output_buffer[COMBINE_BUFFER_SIZE];
@ -433,16 +431,15 @@ static void log_printf_to_logs (
size_t cutoff;
unsigned int normal_len, syslog_len;
int subsysid;
unsigned int level;
int c;
if (rec_ident != LOGSYS_RECID_LOG) {
if (LOGSYS_DECODE_RECID(rec_ident) != LOGSYS_RECID_LOG) {
return;
}
subsysid = _logsys_config_subsys_get(subsys);
if (subsysid <= - 1) {
return;
}
subsysid = LOGSYS_DECODE_SUBSYSID(rec_ident);
level = LOGSYS_DECODE_LEVEL(rec_ident);
while ((c = format_buffer[format_buffer_idx])) {
cutoff = 0;
@ -463,8 +460,8 @@ static void log_printf_to_logs (
switch (format_buffer[format_buffer_idx]) {
case 's':
normal_p = subsys;
syslog_p = subsys;
normal_p = logsys_loggers[subsysid].subsys;
syslog_p = logsys_loggers[subsysid].subsys;
break;
case 'n':
@ -573,9 +570,13 @@ static void log_printf_to_logs (
logsys_close_logfile(subsysid);
logsys_loggers[subsysid].mode &= ~LOGSYS_MODE_OUTPUT_FILE;
pthread_mutex_unlock (&logsys_config_mutex);
log_printf_to_logs(logsys_loggers[subsysid].subsys,
log_printf_to_logs(
LOGSYS_ENCODE_RECID(
LOGSYS_LEVEL_EMERG,
subsysid,
LOGSYS_RECID_LOG),
__FILE__, __FUNCTION__, __LINE__,
LOGSYS_LEVEL_EMERG, 0, tmpbuffer);
tmpbuffer);
}
}
@ -598,9 +599,13 @@ static void log_printf_to_logs (
snprintf(tmpbuffer, sizeof(tmpbuffer),
"LOGSYS EMERGENCY: %s Unable to write to STDERR.",
logsys_loggers[subsysid].subsys);
log_printf_to_logs(logsys_loggers[subsysid].subsys,
__FILE__, __FUNCTION__, __LINE__,
LOGSYS_LEVEL_EMERG, 0, tmpbuffer);
log_printf_to_logs(
LOGSYS_ENCODE_RECID(
LOGSYS_LEVEL_EMERG,
subsysid,
LOGSYS_RECID_LOG),
__FILE__, __FUNCTION__, __LINE__,
tmpbuffer);
}
}
}
@ -609,17 +614,16 @@ static void record_print (const char *buf)
{
const int *buf_uint32t = (const int *)buf;
unsigned int rec_size = buf_uint32t[0];
unsigned int level = buf_uint32t[1];
unsigned int rec_ident = buf_uint32t[2];
unsigned int file_line = buf_uint32t[3];
unsigned int rec_ident = buf_uint32t[1];
unsigned int file_line = buf_uint32t[2];
unsigned int i;
unsigned int words_processed;
unsigned int arg_size_idx;
const void *arguments[64];
unsigned int arg_count;
arg_size_idx = 5;
words_processed = 5;
arg_size_idx = 4;
words_processed = 4;
arg_count = 0;
for (i = 0; words_processed < rec_size; i++) {
@ -636,29 +640,25 @@ static void record_print (const char *buf)
*/
log_printf_to_logs (
(char *)arguments[0],
rec_ident,
(char *)arguments[1],
(char *)arguments[2],
file_line,
level,
rec_ident,
(char *)arguments[3]);
}
static int record_read (char *buf, int rec_idx, int *log_msg) {
unsigned int rec_size;
unsigned int level;
unsigned int rec_ident;
int firstcopy, secondcopy;
rec_size = flt_data[rec_idx];
level = flt_data[(rec_idx + 1) % flt_data_size];
rec_ident = flt_data[(rec_idx + 2) % flt_data_size];
rec_ident = flt_data[(rec_idx + 1) % flt_data_size];
/*
* Not a log record
*/
if (rec_ident != LOGSYS_RECID_LOG) {
if (LOGSYS_DECODE_RECID(rec_ident) != LOGSYS_RECID_LOG) {
*log_msg = 0;
return ((rec_idx + rec_size) % flt_data_size);
}
@ -1081,12 +1081,10 @@ int _logsys_rec_init (unsigned int size)
*/
void _logsys_log_rec (
int subsysid,
unsigned int rec_ident,
const char *function_name,
const char *file_name,
int file_line,
unsigned int level,
unsigned int rec_ident,
...)
{
va_list ap;
@ -1098,13 +1096,16 @@ void _logsys_log_rec (
unsigned int record_reclaim_size;
unsigned int index_start;
int words_written;
int subsysid;
record_reclaim_size = 0;
subsysid = LOGSYS_DECODE_SUBSYSID(rec_ident);
/*
* Decode VA Args
*/
va_start (ap, rec_ident);
va_start (ap, file_line);
arguments = 3;
for (;;) {
buf_args[arguments] = va_arg (ap, void *);
@ -1139,7 +1140,7 @@ void _logsys_log_rec (
/*
* Reclaim data needed for record including 4 words for the header
*/
records_reclaim (idx, record_reclaim_size + 5);
records_reclaim (idx, record_reclaim_size + 4);
/*
* Write record size of zero and rest of header information
@ -1147,9 +1148,6 @@ void _logsys_log_rec (
flt_data[idx++] = 0;
idx_word_step(idx);
flt_data[idx++] = level;
idx_word_step(idx);
flt_data[idx++] = rec_ident;
idx_word_step(idx);
@ -1227,7 +1225,7 @@ void _logsys_log_rec (
* the new head position and commit the new head.
*/
logsys_lock();
if (rec_ident == LOGSYS_RECID_LOG) {
if (LOGSYS_DECODE_RECID(rec_ident) == LOGSYS_RECID_LOG) {
log_requests_pending += 1;
}
if (log_requests_pending == 0) {
@ -1239,21 +1237,20 @@ void _logsys_log_rec (
}
void _logsys_log_vprintf (
int subsysid,
unsigned int rec_ident,
const char *function_name,
const char *file_name,
int file_line,
unsigned int level,
unsigned int rec_ident,
const char *format,
va_list ap)
{
char logsys_print_buffer[COMBINE_BUFFER_SIZE];
unsigned int len;
unsigned int level;
int subsysid;
if (subsysid <= -1) {
subsysid = LOGSYS_MAX_SUBSYS_COUNT;
}
subsysid = LOGSYS_DECODE_SUBSYSID(rec_ident);
level = LOGSYS_DECODE_LEVEL(rec_ident);
if ((level > logsys_loggers[subsysid].syslog_priority) &&
(level > logsys_loggers[subsysid].logfile_priority) &&
@ -1270,12 +1267,11 @@ void _logsys_log_vprintf (
/*
* Create a log record
*/
_logsys_log_rec (subsysid,
_logsys_log_rec (
rec_ident,
function_name,
file_name,
file_line,
level,
rec_ident,
logsys_print_buffer, len + 1,
LOGSYS_REC_END);
@ -1284,9 +1280,9 @@ void _logsys_log_vprintf (
* Output (and block) if the log mode is not threaded otherwise
* expect the worker thread to output the log data once signaled
*/
log_printf_to_logs (logsys_loggers[subsysid].subsys,
file_name, function_name, file_line, level, rec_ident,
logsys_print_buffer);
log_printf_to_logs (rec_ident,
file_name, function_name, file_line,
logsys_print_buffer);
} else {
/*
* Signal worker thread to display logging output
@ -1296,20 +1292,18 @@ void _logsys_log_vprintf (
}
void _logsys_log_printf (
int subsysid,
unsigned int rec_ident,
const char *function_name,
const char *file_name,
int file_line,
unsigned int level,
unsigned int rec_ident,
const char *format,
...)
{
va_list ap;
va_start (ap, format);
_logsys_log_vprintf (subsysid, function_name, file_name, file_line,
level, rec_ident, format, ap);
_logsys_log_vprintf (rec_ident, function_name, file_name, file_line,
format, ap);
va_end (ap);
}

View File

@ -551,15 +551,23 @@ static void ipc_log_printf (const char *format, ...) {
va_start (ap, format);
_logsys_log_vprintf (ipc_subsys_id, __FUNCTION__,
__FILE__, __LINE__, LOGSYS_LEVEL_ERROR, LOGSYS_RECID_LOG, format, ap);
_logsys_log_vprintf (
LOGSYS_ENCODE_RECID(ipc_subsys_id,
LOGSYS_LEVEL_ERROR,
LOGSYS_RECID_LOG),
__FUNCTION__, __FILE__, __LINE__,
format, ap);
va_end (ap);
}
static void ipc_fatal_error(const char *error_msg) {
_logsys_log_printf (ipc_subsys_id, __FUNCTION__,
__FILE__, __LINE__, LOGSYS_LEVEL_ERROR, LOGSYS_RECID_LOG, "%s", error_msg);
_logsys_log_printf (
LOGSYS_ENCODE_RECID(ipc_subsys_id,
LOGSYS_LEVEL_ERROR,
LOGSYS_RECID_LOG),
__FUNCTION__, __FILE__, __LINE__,
"%s", error_msg);
exit(EXIT_FAILURE);
}

View File

@ -157,13 +157,13 @@ struct totemnet_instance {
int totemnet_subsys_id;
void (*totemnet_log_printf) (int subsys,
void (*totemnet_log_printf) (
unsigned int rec_ident,
const char *function,
const char *file,
int line, unsigned int level,
unsigned int rec_ident,
int line,
const char *format,
...)__attribute__((format(printf, 7, 8)));
...)__attribute__((format(printf, 5, 6)));
hdb_handle_t handle;
@ -246,9 +246,12 @@ static void totemnet_instance_initialize (struct totemnet_instance *instance)
#define log_printf(level, format, args...) \
do { \
instance->totemnet_log_printf (instance->totemnet_subsys_id, \
instance->totemnet_log_printf ( \
LOGSYS_ENCODE_RECID(level, \
instance->totemnet_subsys_id, \
LOGSYS_RECID_LOG), \
__FUNCTION__, __FILE__, __LINE__, \
level, LOGSYS_RECID_LOG, (const char *)format, ##args); \
(const char *)format, ##args); \
} while (0);

View File

@ -161,9 +161,12 @@ static int totempg_log_level_warning;
static int totempg_log_level_notice;
static int totempg_log_level_debug;
static int totempg_subsys_id;
static void (*totempg_log_printf) (int subsys_id, const char *function,
const char *file, int line, unsigned int level, unsigned int rec_ident,
const char *format, ...) __attribute__((format(printf, 7, 8)));
static void (*totempg_log_printf) (
unsigned int rec_ident,
const char *function,
const char *file,
int line,
const char *format, ...) __attribute__((format(printf, 5, 6)));
struct totem_config *totempg_totem_config;
@ -241,8 +244,11 @@ static pthread_mutex_t mcast_msg_mutex = PTHREAD_MUTEX_INITIALIZER;
#define log_printf(level, format, args...) \
do { \
totempg_log_printf (totempg_subsys_id, __FUNCTION__, \
__FILE__, __LINE__, level, LOGSYS_RECID_LOG, \
totempg_log_printf ( \
LOGSYS_ENCODE_RECID(level, \
totempg_subsys_id, \
LOGSYS_RECID_LOG), \
__FUNCTION__, __FILE__, __LINE__, \
format, ##args); \
} while (0);

View File

@ -208,9 +208,12 @@ struct totemrrp_instance {
int totemrrp_subsys_id;
void (*totemrrp_log_printf) (int subsys, const char *function,
const char *file, int line, unsigned int level, unsigned int rec_ident,
const char *format, ...)__attribute__((format(printf, 7, 8)));
void (*totemrrp_log_printf) (
unsigned int rec_ident,
const char *function,
const char *file,
int line,
const char *format, ...)__attribute__((format(printf, 5, 6)));
hdb_handle_t handle;
@ -473,9 +476,11 @@ DECLARE_HDB_DATABASE (totemrrp_instance_database,NULL);
#define log_printf(level, format, args...) \
do { \
rrp_instance->totemrrp_log_printf ( \
rrp_instance->totemrrp_subsys_id, \
__FUNCTION__, __FILE__, __LINE__, level, \
LOGSYS_RECID_LOG, format, ##args); \
LOGSYS_ENCODE_RECID(level, \
rrp_instance->totemrrp_subsys_id, \
LOGSYS_RECID_LOG), \
__FUNCTION__, __FILE__, __LINE__, \
format, ##args); \
} while (0);
/*

View File

@ -437,10 +437,12 @@ struct totemsrp_instance {
int totemsrp_subsys_id;
void (*totemsrp_log_printf) (int subsys,
const char *function, const char *file,
int line, unsigned int level, unsigned int rec_ident,
const char *format, ...)__attribute__((format(printf, 7, 8)));;
void (*totemsrp_log_printf) (
unsigned int rec_ident,
const char *function,
const char *file,
int line,
const char *format, ...)__attribute__((format(printf, 5, 6)));;
enum memb_state memb_state;
@ -627,9 +629,12 @@ static const char *rundir = NULL;
#define log_printf(level, format, args...) \
do { \
instance->totemsrp_log_printf (instance->totemsrp_subsys_id, \
__FUNCTION__, __FILE__, __LINE__, level, \
LOGSYS_RECID_LOG, format, ##args); \
instance->totemsrp_log_printf ( \
LOGSYS_ENCODE_RECID(level, \
instance->totemsrp_subsys_id, \
LOGSYS_RECID_LOG), \
__FUNCTION__, __FILE__, __LINE__, \
format, ##args); \
} while (0);
static void totemsrp_instance_initialize (struct totemsrp_instance *instance)

View File

@ -172,37 +172,31 @@ extern unsigned int _logsys_subsys_create (const char *subsys);
extern int _logsys_rec_init (unsigned int size);
extern void _logsys_log_vprintf (
int subsysid,
unsigned int rec_ident,
const char *function_name,
const char *file_name,
int file_line,
unsigned int level,
unsigned int rec_ident,
const char *format,
va_list ap) __attribute__((format(printf, 7, 0)));
va_list ap) __attribute__((format(printf, 5, 0)));
extern void _logsys_log_printf (
int subsysid,
unsigned int rec_ident,
const char *function_name,
const char *file_name,
int file_line,
unsigned int level,
unsigned int rec_ident,
const char *format,
...) __attribute__((format(printf, 7, 8)));
...) __attribute__((format(printf, 5, 6)));
extern void _logsys_log_rec (
int subsysid,
unsigned int rec_ident,
const char *function_name,
const char *file_name,
int file_line,
unsigned int level,
unsigned int rec_ident,
...);
extern int _logsys_wthread_create (void);
static unsigned int logsys_subsys_id __attribute__((unused)) = -1;
static int logsys_subsys_id __attribute__((unused)) = LOGSYS_MAX_SUBSYS_COUNT;
/*
* External API - init
@ -356,76 +350,76 @@ static void logsys_subsys_init (void) \
#define log_rec(rec_ident, args...) \
do { \
_logsys_log_rec (logsys_subsys_id, __FUNCTION__, \
__FILE__, __LINE__, rec_ident, 0, ##args, \
_logsys_log_rec (rec_ident, __FUNCTION__, \
__FILE__, __LINE__, ##args, \
LOGSYS_REC_END); \
} while(0)
#define log_printf(level, format, args...) \
do { \
_logsys_log_printf (logsys_subsys_id, __FUNCTION__, \
__FILE__, __LINE__, level, LOGSYS_RECID_LOG, \
_logsys_log_printf ( \
LOGSYS_ENCODE_RECID(level, \
logsys_subsys_id, \
LOGSYS_RECID_LOG), \
__FUNCTION__, __FILE__, __LINE__, \
format, ##args); \
} while(0)
#define ENTER() do { \
_logsys_log_rec (logsys_subsys_id, __FUNCTION__, \
__FILE__, __LINE__, LOGSYS_LEVEL_DEBUG, \
LOGSYS_RECID_ENTER, LOGSYS_REC_END); \
_logsys_log_rec ( \
LOGSYS_ENCODE_RECID(LOGSYS_LEVEL_DEBUG, \
logsys_subsys_id, \
LOGSYS_RECID_ENTER), \
__FUNCTION__, __FILE__, __LINE__, LOGSYS_REC_END); \
} while(0)
#define LEAVE() do { \
_logsys_log_rec (logsys_subsys_id, __FUNCTION__, \
__FILE__, __LINE__, LOGSYS_LEVEL_DEBUG, \
LOGSYS_RECID_LEAVE, LOGSYS_REC_END); \
_logsys_log_rec ( \
LOGSYS_ENCODE_RECID(LOGSYS_LEVEL_DEBUG, \
logsys_subsys_id, \
LOGSYS_RECID_LEAVE), \
__FUNCTION__, __FILE__, __LINE__, LOGSYS_REC_END); \
} while(0)
#define TRACE(recid, format, args...) do { \
_logsys_log_printf ( \
LOGSYS_ENCODE_RECID(LOGSYS_LEVEL_DEBUG, \
logsys_subsys_id, \
recid), \
__FUNCTION__, __FILE__, __LINE__, \
format, ##args); \
} while(0)
#define TRACE1(format, args...) do { \
_logsys_log_printf (logsys_subsys_id, __FUNCTION__, \
__FILE__, __LINE__, LOGSYS_LEVEL_DEBUG, \
LOGSYS_RECID_TRACE1, format, ##args); \
TRACE(LOGSYS_RECID_TRACE1, format, ##args); \
} while(0)
#define TRACE2(format, args...) do { \
_logsys_log_printf (logsys_subsys_id, __FUNCTION__, \
__FILE__, __LINE__, LOGSYS_LEVEL_DEBUG, \
LOGSYS_RECID_TRACE2, format, ##args); \
TRACE(LOGSYS_RECID_TRACE2, format, ##args); \
} while(0)
#define TRACE3(format, args...) do { \
_logsys_log_printf (logsys_subsys_id, __FUNCTION__, \
__FILE__, __LINE__, LOGSYS_LEVEL_DEBUG, \
LOGSYS_RECID_TRACE3, format, ##args); \
TRACE(LOGSYS_RECID_TRACE3, format, ##args); \
} while(0)
#define TRACE4(format, args...) do { \
_logsys_log_printf (logsys_subsys_id, __FUNCTION__, \
__FILE__, __LINE__, LOGSYS_LEVEL_DEBUG, \
LOGSYS_RECID_TRACE4, format, ##args); \
TRACE(LOGSYS_RECID_TRACE4, format, ##args); \
} while(0)
#define TRACE5(format, args...) do { \
_logsys_log_printf (logsys_subsys_id, __FUNCTION__, \
__FILE__, __LINE__, LOGSYS_LEVEL_DEBUG, \
LOGSYS_RECID_TRACE5, format, ##args); \
TRACE(LOGSYS_RECID_TRACE5, format, ##args); \
} while(0)
#define TRACE6(format, args...) do { \
_logsys_log_printf (logsys_subsys_id, __FUNCTION__, \
__FILE__, __LINE__, LOGSYS_LEVEL_DEBUG, \
LOGSYS_RECID_TRACE6, format, ##args); \
TRACE(LOGSYS_RECID_TRACE6, format, ##args); \
} while(0)
#define TRACE7(format, args...) do { \
_logsys_log_printf (logsys_subsys_id, __FUNCTION__, \
__FILE__, __LINE__, LOGSYS_LEVEL_DEBUG, \
LOGSYS_RECID_TRACE7, format, ##args); \
TRACE(LOGSYS_RECID_TRACE7, format, ##args); \
} while(0)
#define TRACE8(format, args...) do { \
_logsys_log_printf (logsys_subsys_id, __FUNCTION__, \
__FILE__, __LINE__, LOGSYS_LEVEL_DEBUG, \
LOGSYS_RECID_TRACE8, format, ##args); \
TRACE(LOGSYS_RECID_TRACE8, format, ##args); \
} while(0)
#endif /* LOGSYS_UTILS_ONLY */

View File

@ -58,15 +58,13 @@ struct totem_interface {
};
struct totem_logging_configuration {
void (*log_printf) (
int subsys,
const char *function_name,
const char *file_name,
int file_line,
unsigned int level,
unsigned int tag,
const char *format,
...) __attribute__((format(printf, 7, 8)));
void (*log_printf) (
unsigned int rec_ident,
const char *function_name,
const char *file_name,
int file_line,
const char *format,
...) __attribute__((format(printf, 5, 6)));
int log_level_security;
int log_level_error;

View File

@ -56,9 +56,13 @@ int main(int argc, char **argv)
int i;
for (i = 0; i < 10; i++) {
log_printf (LOGSYS_LEVEL_NOTICE, "This is a test of %s\n", "stringparse");
log_printf (LOGSYS_LEVEL_NOTICE,
"This is a test of %s(%d)\n", "stringparse", i);
log_rec (LOGREC_ID_CHECKPOINT_CREATE, "record1", 8, "record22", 9, "record333", 10, "record444", 11, LOGSYS_REC_END);
log_rec (LOGSYS_ENCODE_RECID(LOGSYS_LEVEL_NOTICE,
logsys_subsys_id,
LOGREC_ID_CHECKPOINT_CREATE),
"record1", 8, "record22", 9, "record333", 10, "record444", 11, LOGSYS_REC_END);
}
logsys_log_rec_store ("fdata");

View File

@ -383,14 +383,15 @@ static void logsys_rec_print (const void *record)
int arg_count = 0;
rec_size = buf_uint32t[rec_idx];
level = buf_uint32t[rec_idx+1];
rec_ident = buf_uint32t[rec_idx+2];
line = buf_uint32t[rec_idx+3];
record_number = buf_uint32t[rec_idx+4];
rec_ident = buf_uint32t[rec_idx+1];
line = buf_uint32t[rec_idx+2];
record_number = buf_uint32t[rec_idx+3];
level = LOGSYS_DECODE_LEVEL(rec_ident);
printf ("rec=[%d] ", record_number);
arg_size_idx = rec_idx + 5;
words_processed = 5;
arg_size_idx = rec_idx + 4;
words_processed = 4;
for (i = 0; words_processed < rec_size; i++) {
arguments[arg_count++] =
(const char *)&buf_uint32t[arg_size_idx + 1];
@ -411,7 +412,7 @@ static void logsys_rec_print (const void *record)
}
}
switch(rec_ident) {
switch(LOGSYS_DECODE_RECID(rec_ident)) {
case LOGSYS_RECID_LOG:
printf ("Log Message=%s\n", arguments[3]);
break;
@ -447,7 +448,7 @@ static void logsys_rec_print (const void *record)
break;
default:
printf ("Unknown record type found subsys=[%s] ident=[%d]\n",
arguments[0], rec_ident);
arguments[0], LOGSYS_DECODE_RECID(rec_ident));
break;
}
#ifdef COMPILE_OUT