Added log manager initialization flag that prints all logs to stdout.
This commit is contained in:
@ -54,7 +54,7 @@ static simple_mutex_t msg_mutex;
|
|||||||
static int highprec = 0;
|
static int highprec = 0;
|
||||||
static int do_syslog = 1;
|
static int do_syslog = 1;
|
||||||
static int do_maxscalelog = 1;
|
static int do_maxscalelog = 1;
|
||||||
|
static int use_stdout = 0;
|
||||||
/**
|
/**
|
||||||
* Variable holding the enabled logfiles information.
|
* Variable holding the enabled logfiles information.
|
||||||
* Used from log users to check enabled logs prior calling
|
* Used from log users to check enabled logs prior calling
|
||||||
@ -1331,12 +1331,14 @@ static bool logfile_set_enabled(
|
|||||||
}
|
}
|
||||||
lf = &lm->lm_logfile[id];
|
lf = &lm->lm_logfile[id];
|
||||||
CHK_LOGFILE(lf);
|
CHK_LOGFILE(lf);
|
||||||
|
if(use_stdout == 0)
|
||||||
if (val) {
|
{
|
||||||
logstr = strdup("---\tLogging to file is enabled\t--");
|
if (val) {
|
||||||
} else {
|
logstr = strdup("---\tLogging to file is enabled\t--");
|
||||||
logstr = strdup("---\tLogging to file is disabled\t--");
|
} else {
|
||||||
}
|
logstr = strdup("---\tLogging to file is disabled\t--");
|
||||||
|
}
|
||||||
|
|
||||||
oldval = lf->lf_enabled;
|
oldval = lf->lf_enabled;
|
||||||
lf->lf_enabled = val;
|
lf->lf_enabled = val;
|
||||||
err = logmanager_write_log(id,
|
err = logmanager_write_log(id,
|
||||||
@ -1348,7 +1350,7 @@ static bool logfile_set_enabled(
|
|||||||
logstr,
|
logstr,
|
||||||
notused);
|
notused);
|
||||||
free(logstr);
|
free(logstr);
|
||||||
|
}
|
||||||
if (err != 0) {
|
if (err != 0) {
|
||||||
lf->lf_enabled = oldval;
|
lf->lf_enabled = oldval;
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
@ -1445,7 +1447,7 @@ int skygw_log_write(
|
|||||||
* Find out the length of log string (to be formatted str).
|
* Find out the length of log string (to be formatted str).
|
||||||
*/
|
*/
|
||||||
va_start(valist, str);
|
va_start(valist, str);
|
||||||
len = vsnprintf(NULL, 0, str, valist);
|
len = vsnprintf(NULL, 0, str, valist);
|
||||||
va_end(valist);
|
va_end(valist);
|
||||||
/**
|
/**
|
||||||
* Add one for line feed.
|
* Add one for line feed.
|
||||||
@ -1695,9 +1697,12 @@ static bool fnames_conf_init(
|
|||||||
fn->fn_chk_tail = CHK_NUM_FNAMES;
|
fn->fn_chk_tail = CHK_NUM_FNAMES;
|
||||||
#endif
|
#endif
|
||||||
optind = 1; /**<! reset getopt index */
|
optind = 1; /**<! reset getopt index */
|
||||||
while ((opt = getopt(argc, argv, "+a:b:c:d:e:f:g:h:i:j:l:m:s:")) != -1)
|
while ((opt = getopt(argc, argv, "+a:b:c:d:e:f:g:h:i:j:l:m:s:o")) != -1)
|
||||||
{
|
{
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
|
case 'o':
|
||||||
|
use_stdout = 1;
|
||||||
|
break;
|
||||||
case 'a':
|
case 'a':
|
||||||
fn->fn_debug_prefix = strndup(optarg, MAX_PREFIXLEN);
|
fn->fn_debug_prefix = strndup(optarg, MAX_PREFIXLEN);
|
||||||
break;
|
break;
|
||||||
@ -2153,8 +2158,14 @@ static bool logfile_open_file(
|
|||||||
bool succp;
|
bool succp;
|
||||||
char* start_msg_str;
|
char* start_msg_str;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (lf->lf_store_shmem)
|
if(use_stdout)
|
||||||
|
{
|
||||||
|
fw->fwr_file[lf->lf_id] = skygw_file_init_stdout (
|
||||||
|
lf->lf_full_file_name,
|
||||||
|
lf->lf_full_link_name);
|
||||||
|
}
|
||||||
|
else if (lf->lf_store_shmem)
|
||||||
{
|
{
|
||||||
/** Create symlink pointing to log file */
|
/** Create symlink pointing to log file */
|
||||||
fw->fwr_file[lf->lf_id] = skygw_file_init(
|
fw->fwr_file[lf->lf_id] = skygw_file_init(
|
||||||
@ -2177,32 +2188,35 @@ static bool logfile_open_file(
|
|||||||
succp = false;
|
succp = false;
|
||||||
goto return_succp;
|
goto return_succp;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lf->lf_enabled)
|
if(use_stdout == 0)
|
||||||
{
|
{
|
||||||
|
if (lf->lf_enabled)
|
||||||
|
{
|
||||||
start_msg_str = strdup("---\tLogging is enabled.\n");
|
start_msg_str = strdup("---\tLogging is enabled.\n");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
start_msg_str = strdup("---\tLogging is disabled.\n");
|
start_msg_str = strdup("---\tLogging is disabled.\n");
|
||||||
}
|
}
|
||||||
err = skygw_file_write(fw->fwr_file[lf->lf_id],
|
err = skygw_file_write(fw->fwr_file[lf->lf_id],
|
||||||
(void *)start_msg_str,
|
(void *)start_msg_str,
|
||||||
strlen(start_msg_str),
|
strlen(start_msg_str),
|
||||||
true);
|
true);
|
||||||
|
|
||||||
if (err != 0)
|
if (err != 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Error : writing to file %s failed due to %d, %s. "
|
"Error : writing to file %s failed due to %d, %s. "
|
||||||
"Exiting MaxScale.\n",
|
"Exiting MaxScale.\n",
|
||||||
lf->lf_full_file_name,
|
lf->lf_full_file_name,
|
||||||
err,
|
err,
|
||||||
strerror(err));
|
strerror(err));
|
||||||
succp = false;
|
succp = false;
|
||||||
goto return_succp;
|
goto return_succp;
|
||||||
}
|
}
|
||||||
free(start_msg_str);
|
free(start_msg_str);
|
||||||
|
}
|
||||||
succp = true;
|
succp = true;
|
||||||
|
|
||||||
return_succp:
|
return_succp:
|
||||||
|
|||||||
@ -33,7 +33,7 @@
|
|||||||
#include <log_manager.h>
|
#include <log_manager.h>
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int arg_count = 3;
|
int arg_count = 4;
|
||||||
char *home;
|
char *home;
|
||||||
char** arg_vector;
|
char** arg_vector;
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ int main(int argc, char **argv)
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
arg_vector = malloc(sizeof(char*)*4);
|
arg_vector = malloc(sizeof(char*)*5);
|
||||||
|
|
||||||
if(arg_vector == NULL)
|
if(arg_vector == NULL)
|
||||||
{
|
{
|
||||||
@ -64,8 +64,8 @@ int main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
arg_vector[2] = strdup("/usr/local/mariadb-maxscale/log");
|
arg_vector[2] = strdup("/usr/local/mariadb-maxscale/log");
|
||||||
}
|
}
|
||||||
|
arg_vector[3] = "-o";
|
||||||
arg_vector[3] = NULL;
|
arg_vector[4] = NULL;
|
||||||
skygw_logmanager_init(arg_count,arg_vector);
|
skygw_logmanager_init(arg_count,arg_vector);
|
||||||
skygw_log_enable(LOGFILE_TRACE);
|
skygw_log_enable(LOGFILE_TRACE);
|
||||||
skygw_log_enable(LOGFILE_DEBUG);
|
skygw_log_enable(LOGFILE_DEBUG);
|
||||||
|
|||||||
@ -41,7 +41,7 @@ int
|
|||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
char *enc, *pw;
|
char *enc, *pw;
|
||||||
int arg_count = 3;
|
int arg_count = 4;
|
||||||
char *home;
|
char *home;
|
||||||
char** arg_vector;
|
char** arg_vector;
|
||||||
|
|
||||||
@ -52,7 +52,7 @@ main(int argc, char **argv)
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
arg_vector = malloc(sizeof(char*)*4);
|
arg_vector = malloc(sizeof(char*)*5);
|
||||||
|
|
||||||
if(arg_vector == NULL)
|
if(arg_vector == NULL)
|
||||||
{
|
{
|
||||||
@ -73,7 +73,8 @@ main(int argc, char **argv)
|
|||||||
arg_vector[2] = strdup("/usr/local/mariadb-maxscale/log");
|
arg_vector[2] = strdup("/usr/local/mariadb-maxscale/log");
|
||||||
}
|
}
|
||||||
|
|
||||||
arg_vector[3] = NULL;
|
arg_vector[3] = "-o";
|
||||||
|
arg_vector[4] = NULL;
|
||||||
skygw_logmanager_init(arg_count,arg_vector);
|
skygw_logmanager_init(arg_count,arg_vector);
|
||||||
skygw_log_enable(LOGFILE_TRACE);
|
skygw_log_enable(LOGFILE_TRACE);
|
||||||
skygw_log_enable(LOGFILE_DEBUG);
|
skygw_log_enable(LOGFILE_DEBUG);
|
||||||
|
|||||||
@ -2144,15 +2144,11 @@ int main(int argc, char** argv)
|
|||||||
}
|
}
|
||||||
printf("Log files written to: %s\n",home?home:"/tpm");
|
printf("Log files written to: %s\n",home?home:"/tpm");
|
||||||
|
|
||||||
int argc_ = 11;
|
int argc_ = 2;
|
||||||
char* argv_[] =
|
char* argv_[] =
|
||||||
{
|
{
|
||||||
"log_manager",
|
"log_manager",
|
||||||
"-j",home?home:"/tmp",
|
"-o",
|
||||||
"-a","ruleparser_debug",
|
|
||||||
"-c","ruleparser_trace",
|
|
||||||
"-e","ruleparser_message",
|
|
||||||
"-g","ruleparser_error",
|
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -30,76 +30,6 @@
|
|||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include "skygw_utils.h"
|
#include "skygw_utils.h"
|
||||||
|
|
||||||
const char* timestamp_formatstr = "%04d-%02d-%02d %02d:%02d:%02d ";
|
|
||||||
/** One for terminating '\0' */
|
|
||||||
const size_t timestamp_len = (4+1 +2+1 +2+1 +2+1 +2+1 +2+3 +1) * sizeof(char);
|
|
||||||
|
|
||||||
|
|
||||||
const char* timestamp_formatstr_hp = "%04d-%02d-%02d %02d:%02d:%02d.%03d ";
|
|
||||||
/** One for terminating '\0' */
|
|
||||||
const size_t timestamp_len_hp = (4+1 +2+1 +2+1 +2+1 +2+1 +2+1+3+3 +1) * sizeof(char);
|
|
||||||
|
|
||||||
/** Single-linked list for storing test cases */
|
|
||||||
|
|
||||||
struct slist_node_st {
|
|
||||||
skygw_chk_t slnode_chk_top;
|
|
||||||
slist_t* slnode_list;
|
|
||||||
slist_node_t* slnode_next;
|
|
||||||
void* slnode_data;
|
|
||||||
size_t slnode_cursor_refcount;
|
|
||||||
skygw_chk_t slnode_chk_tail;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct slist_st {
|
|
||||||
skygw_chk_t slist_chk_top;
|
|
||||||
slist_node_t* slist_head;
|
|
||||||
slist_node_t* slist_tail;
|
|
||||||
int slist_nelems;
|
|
||||||
slist_t* slist_cursors_list;
|
|
||||||
skygw_chk_t slist_chk_tail;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct slist_cursor_st {
|
|
||||||
skygw_chk_t slcursor_chk_top;
|
|
||||||
slist_t* slcursor_list;
|
|
||||||
slist_node_t* slcursor_pos;
|
|
||||||
skygw_chk_t slcursor_chk_tail;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct skygw_thread_st {
|
|
||||||
skygw_chk_t sth_chk_top;
|
|
||||||
bool sth_must_exit;
|
|
||||||
simple_mutex_t* sth_mutex;
|
|
||||||
pthread_t sth_parent;
|
|
||||||
pthread_t sth_thr;
|
|
||||||
int sth_errno;
|
|
||||||
#if defined(SS_DEBUG)
|
|
||||||
skygw_thr_state_t sth_state;
|
|
||||||
#endif
|
|
||||||
char* sth_name;
|
|
||||||
void* (*sth_thrfun)(void* data);
|
|
||||||
void* sth_data;
|
|
||||||
skygw_chk_t sth_chk_tail;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct skygw_message_st {
|
|
||||||
skygw_chk_t mes_chk_top;
|
|
||||||
bool mes_sent;
|
|
||||||
pthread_mutex_t mes_mutex;
|
|
||||||
pthread_cond_t mes_cond;
|
|
||||||
skygw_chk_t mes_chk_tail;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct skygw_file_st {
|
|
||||||
skygw_chk_t sf_chk_top;
|
|
||||||
char* sf_fname;
|
|
||||||
FILE* sf_file;
|
|
||||||
int sf_fd;
|
|
||||||
skygw_chk_t sf_chk_tail;
|
|
||||||
};
|
|
||||||
|
|
||||||
/** End of structs and types */
|
|
||||||
|
|
||||||
#if defined(MLIST)
|
#if defined(MLIST)
|
||||||
|
|
||||||
|
|
||||||
@ -2033,6 +1963,32 @@ return_file:
|
|||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
skygw_file_t* skygw_file_init_stdout(
|
||||||
|
char* fname,
|
||||||
|
char* symlinkname)
|
||||||
|
{
|
||||||
|
skygw_file_t* file;
|
||||||
|
|
||||||
|
if ((file = (skygw_file_t *)calloc(1, sizeof(skygw_file_t))) == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr,
|
||||||
|
"* Error : Memory allocation for file %s failed.\n",
|
||||||
|
fname);
|
||||||
|
perror("SkyGW file allocation\n");
|
||||||
|
goto return_file;
|
||||||
|
}
|
||||||
|
ss_dassert(file != NULL);
|
||||||
|
file->sf_chk_top = CHK_NUM_FILE;
|
||||||
|
file->sf_chk_tail = CHK_NUM_FILE;
|
||||||
|
file->sf_fname = strdup(fname);
|
||||||
|
file->sf_file = stdout;
|
||||||
|
CHK_FILE(file);
|
||||||
|
|
||||||
|
return_file:
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
|
||||||
void skygw_file_close(
|
void skygw_file_close(
|
||||||
skygw_file_t* file,
|
skygw_file_t* file,
|
||||||
bool shutdown)
|
bool shutdown)
|
||||||
|
|||||||
@ -80,6 +80,75 @@ struct mlist_node_st {
|
|||||||
typedef enum { THR_INIT, THR_RUNNING, THR_STOPPED, THR_DONE } skygw_thr_state_t;
|
typedef enum { THR_INIT, THR_RUNNING, THR_STOPPED, THR_DONE } skygw_thr_state_t;
|
||||||
typedef enum { MES_RC_FAIL, MES_RC_SUCCESS, MES_RC_TIMEOUT } skygw_mes_rc_t;
|
typedef enum { MES_RC_FAIL, MES_RC_SUCCESS, MES_RC_TIMEOUT } skygw_mes_rc_t;
|
||||||
|
|
||||||
|
|
||||||
|
static const char* timestamp_formatstr = "%04d-%02d-%02d %02d:%02d:%02d ";
|
||||||
|
/** One for terminating '\0' */
|
||||||
|
static const size_t timestamp_len = (4+1 +2+1 +2+1 +2+1 +2+1 +2+3 +1) * sizeof(char);
|
||||||
|
|
||||||
|
|
||||||
|
static const char* timestamp_formatstr_hp = "%04d-%02d-%02d %02d:%02d:%02d.%03d ";
|
||||||
|
/** One for terminating '\0' */
|
||||||
|
static const size_t timestamp_len_hp = (4+1 +2+1 +2+1 +2+1 +2+1 +2+1+3+3 +1) * sizeof(char);
|
||||||
|
|
||||||
|
/** Single-linked list for storing test cases */
|
||||||
|
|
||||||
|
struct slist_node_st {
|
||||||
|
skygw_chk_t slnode_chk_top;
|
||||||
|
slist_t* slnode_list;
|
||||||
|
slist_node_t* slnode_next;
|
||||||
|
void* slnode_data;
|
||||||
|
size_t slnode_cursor_refcount;
|
||||||
|
skygw_chk_t slnode_chk_tail;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct slist_st {
|
||||||
|
skygw_chk_t slist_chk_top;
|
||||||
|
slist_node_t* slist_head;
|
||||||
|
slist_node_t* slist_tail;
|
||||||
|
int slist_nelems;
|
||||||
|
slist_t* slist_cursors_list;
|
||||||
|
skygw_chk_t slist_chk_tail;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct slist_cursor_st {
|
||||||
|
skygw_chk_t slcursor_chk_top;
|
||||||
|
slist_t* slcursor_list;
|
||||||
|
slist_node_t* slcursor_pos;
|
||||||
|
skygw_chk_t slcursor_chk_tail;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct skygw_thread_st {
|
||||||
|
skygw_chk_t sth_chk_top;
|
||||||
|
bool sth_must_exit;
|
||||||
|
simple_mutex_t* sth_mutex;
|
||||||
|
pthread_t sth_parent;
|
||||||
|
pthread_t sth_thr;
|
||||||
|
int sth_errno;
|
||||||
|
#if defined(SS_DEBUG)
|
||||||
|
skygw_thr_state_t sth_state;
|
||||||
|
#endif
|
||||||
|
char* sth_name;
|
||||||
|
void* (*sth_thrfun)(void* data);
|
||||||
|
void* sth_data;
|
||||||
|
skygw_chk_t sth_chk_tail;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct skygw_message_st {
|
||||||
|
skygw_chk_t mes_chk_top;
|
||||||
|
bool mes_sent;
|
||||||
|
pthread_mutex_t mes_mutex;
|
||||||
|
pthread_cond_t mes_cond;
|
||||||
|
skygw_chk_t mes_chk_tail;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct skygw_file_st {
|
||||||
|
skygw_chk_t sf_chk_top;
|
||||||
|
char* sf_fname;
|
||||||
|
FILE* sf_file;
|
||||||
|
int sf_fd;
|
||||||
|
skygw_chk_t sf_chk_tail;
|
||||||
|
};
|
||||||
|
|
||||||
EXTERN_C_BLOCK_BEGIN
|
EXTERN_C_BLOCK_BEGIN
|
||||||
|
|
||||||
slist_cursor_t* slist_init(void);
|
slist_cursor_t* slist_init(void);
|
||||||
@ -148,6 +217,7 @@ EXTERN_C_BLOCK_END
|
|||||||
|
|
||||||
/** Skygw file routines */
|
/** Skygw file routines */
|
||||||
skygw_file_t* skygw_file_init(char* fname, char* symlinkname);
|
skygw_file_t* skygw_file_init(char* fname, char* symlinkname);
|
||||||
|
skygw_file_t* skygw_file_init_stdout(char* fname, char* symlinkname);
|
||||||
void skygw_file_close(skygw_file_t* file, bool shutdown);
|
void skygw_file_close(skygw_file_t* file, bool shutdown);
|
||||||
int skygw_file_write(
|
int skygw_file_write(
|
||||||
skygw_file_t* file,
|
skygw_file_t* file,
|
||||||
|
|||||||
Reference in New Issue
Block a user