Merge branch 'logmanager_stdout' into develop
This commit is contained in:
@ -54,7 +54,7 @@ static simple_mutex_t msg_mutex;
|
||||
static int highprec = 0;
|
||||
static int do_syslog = 1;
|
||||
static int do_maxscalelog = 1;
|
||||
|
||||
static int use_stdout = 0;
|
||||
/**
|
||||
* Variable holding the enabled logfiles information.
|
||||
* Used from log users to check enabled logs prior calling
|
||||
@ -1331,12 +1331,14 @@ static bool logfile_set_enabled(
|
||||
}
|
||||
lf = &lm->lm_logfile[id];
|
||||
CHK_LOGFILE(lf);
|
||||
|
||||
if (val) {
|
||||
logstr = strdup("---\tLogging to file is enabled\t--");
|
||||
} else {
|
||||
logstr = strdup("---\tLogging to file is disabled\t--");
|
||||
}
|
||||
if(use_stdout == 0)
|
||||
{
|
||||
if (val) {
|
||||
logstr = strdup("---\tLogging to file is enabled\t--");
|
||||
} else {
|
||||
logstr = strdup("---\tLogging to file is disabled\t--");
|
||||
}
|
||||
|
||||
oldval = lf->lf_enabled;
|
||||
lf->lf_enabled = val;
|
||||
err = logmanager_write_log(id,
|
||||
@ -1348,7 +1350,7 @@ static bool logfile_set_enabled(
|
||||
logstr,
|
||||
notused);
|
||||
free(logstr);
|
||||
|
||||
}
|
||||
if (err != 0) {
|
||||
lf->lf_enabled = oldval;
|
||||
fprintf(stderr,
|
||||
@ -1445,7 +1447,7 @@ int skygw_log_write(
|
||||
* Find out the length of log string (to be formatted str).
|
||||
*/
|
||||
va_start(valist, str);
|
||||
len = vsnprintf(NULL, 0, str, valist);
|
||||
len = vsnprintf(NULL, 0, str, valist);
|
||||
va_end(valist);
|
||||
/**
|
||||
* Add one for line feed.
|
||||
@ -1695,9 +1697,12 @@ static bool fnames_conf_init(
|
||||
fn->fn_chk_tail = CHK_NUM_FNAMES;
|
||||
#endif
|
||||
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) {
|
||||
case 'o':
|
||||
use_stdout = 1;
|
||||
break;
|
||||
case 'a':
|
||||
fn->fn_debug_prefix = strndup(optarg, MAX_PREFIXLEN);
|
||||
break;
|
||||
@ -2153,8 +2158,14 @@ static bool logfile_open_file(
|
||||
bool succp;
|
||||
char* start_msg_str;
|
||||
int err;
|
||||
|
||||
if (lf->lf_store_shmem)
|
||||
|
||||
if(use_stdout)
|
||||
{
|
||||
fw->fwr_file[lf->lf_id] = skygw_file_alloc (
|
||||
lf->lf_full_file_name);
|
||||
fw->fwr_file[lf->lf_id]->sf_file = stdout;
|
||||
}
|
||||
else if (lf->lf_store_shmem)
|
||||
{
|
||||
/** Create symlink pointing to log file */
|
||||
fw->fwr_file[lf->lf_id] = skygw_file_init(
|
||||
@ -2177,32 +2188,35 @@ static bool logfile_open_file(
|
||||
succp = false;
|
||||
goto return_succp;
|
||||
}
|
||||
|
||||
if (lf->lf_enabled)
|
||||
{
|
||||
|
||||
if(use_stdout == 0)
|
||||
{
|
||||
if (lf->lf_enabled)
|
||||
{
|
||||
start_msg_str = strdup("---\tLogging is enabled.\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
start_msg_str = strdup("---\tLogging is disabled.\n");
|
||||
}
|
||||
err = skygw_file_write(fw->fwr_file[lf->lf_id],
|
||||
(void *)start_msg_str,
|
||||
strlen(start_msg_str),
|
||||
true);
|
||||
|
||||
if (err != 0)
|
||||
{
|
||||
}
|
||||
err = skygw_file_write(fw->fwr_file[lf->lf_id],
|
||||
(void *)start_msg_str,
|
||||
strlen(start_msg_str),
|
||||
true);
|
||||
|
||||
if (err != 0)
|
||||
{
|
||||
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",
|
||||
lf->lf_full_file_name,
|
||||
err,
|
||||
strerror(err));
|
||||
lf->lf_full_file_name,
|
||||
err,
|
||||
strerror(err));
|
||||
succp = false;
|
||||
goto return_succp;
|
||||
}
|
||||
free(start_msg_str);
|
||||
}
|
||||
free(start_msg_str);
|
||||
}
|
||||
succp = true;
|
||||
|
||||
return_succp:
|
||||
@ -2727,7 +2741,10 @@ static void filewriter_done(
|
||||
for (i=LOGFILE_FIRST; i<=LOGFILE_LAST; i++)
|
||||
{
|
||||
id = (logfile_id_t)i;
|
||||
skygw_file_close(fw->fwr_file[id], true);
|
||||
if(use_stdout)
|
||||
skygw_file_free(fw->fwr_file[id]);
|
||||
else
|
||||
skygw_file_close(fw->fwr_file[id], true);
|
||||
}
|
||||
fw->fwr_state = DONE;
|
||||
case DONE:
|
||||
@ -2859,6 +2876,9 @@ static void* thr_filewriter_fun(
|
||||
}
|
||||
else if ((succp = logfile_open_file(fwr, lf)))
|
||||
{
|
||||
if(use_stdout)
|
||||
skygw_file_free (file);
|
||||
else
|
||||
skygw_file_close(file, false); /*< close old file */
|
||||
}
|
||||
|
||||
|
||||
@ -33,7 +33,7 @@
|
||||
#include <log_manager.h>
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int arg_count = 3;
|
||||
int arg_count = 4;
|
||||
char *home;
|
||||
char** arg_vector;
|
||||
|
||||
@ -44,7 +44,7 @@ int main(int argc, char **argv)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
arg_vector = malloc(sizeof(char*)*4);
|
||||
arg_vector = malloc(sizeof(char*)*5);
|
||||
|
||||
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[3] = NULL;
|
||||
arg_vector[3] = "-o";
|
||||
arg_vector[4] = NULL;
|
||||
skygw_logmanager_init(arg_count,arg_vector);
|
||||
skygw_log_enable(LOGFILE_TRACE);
|
||||
skygw_log_enable(LOGFILE_DEBUG);
|
||||
|
||||
@ -41,7 +41,7 @@ int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
char *enc, *pw;
|
||||
int arg_count = 3;
|
||||
int arg_count = 4;
|
||||
char *home;
|
||||
char** arg_vector;
|
||||
|
||||
@ -52,7 +52,7 @@ main(int argc, char **argv)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
arg_vector = malloc(sizeof(char*)*4);
|
||||
arg_vector = malloc(sizeof(char*)*5);
|
||||
|
||||
if(arg_vector == NULL)
|
||||
{
|
||||
@ -73,7 +73,8 @@ main(int argc, char **argv)
|
||||
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_log_enable(LOGFILE_TRACE);
|
||||
skygw_log_enable(LOGFILE_DEBUG);
|
||||
|
||||
@ -2225,15 +2225,11 @@ int main(int argc, char** argv)
|
||||
}
|
||||
printf("Log files written to: %s\n",home?home:"/tpm");
|
||||
|
||||
int argc_ = 11;
|
||||
int argc_ = 2;
|
||||
char* argv_[] =
|
||||
{
|
||||
"log_manager",
|
||||
"-j",home?home:"/tmp",
|
||||
"-a","ruleparser_debug",
|
||||
"-c","ruleparser_trace",
|
||||
"-e","ruleparser_message",
|
||||
"-g","ruleparser_error",
|
||||
"-o",
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
@ -30,76 +30,6 @@
|
||||
#include <sys/time.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)
|
||||
|
||||
|
||||
@ -1952,24 +1882,37 @@ return_rc:
|
||||
return rc;
|
||||
}
|
||||
|
||||
skygw_file_t* skygw_file_alloc(
|
||||
char* fname)
|
||||
{
|
||||
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");
|
||||
return NULL;
|
||||
}
|
||||
ss_dassert(file != NULL);
|
||||
file->sf_chk_top = CHK_NUM_FILE;
|
||||
file->sf_chk_tail = CHK_NUM_FILE;
|
||||
file->sf_fname = strdup(fname);
|
||||
return file;
|
||||
}
|
||||
|
||||
skygw_file_t* skygw_file_init(
|
||||
char* fname,
|
||||
char* symlinkname)
|
||||
{
|
||||
skygw_file_t* file;
|
||||
|
||||
if ((file = (skygw_file_t *)calloc(1, sizeof(skygw_file_t))) == NULL)
|
||||
if ((file = skygw_file_alloc (fname)) == NULL)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"* Error : Memory allocation for file %s failed.\n",
|
||||
fname);
|
||||
perror("SkyGW file allocation\n");
|
||||
/** Error was reported in skygw_file_alloc */
|
||||
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);
|
||||
|
||||
if ((file->sf_file = fopen(file->sf_fname, "a")) == NULL)
|
||||
{
|
||||
@ -2033,6 +1976,12 @@ return_file:
|
||||
return file;
|
||||
}
|
||||
|
||||
void skygw_file_free(skygw_file_t* file)
|
||||
{
|
||||
free(file->sf_fname);
|
||||
free(file);
|
||||
}
|
||||
|
||||
void skygw_file_close(
|
||||
skygw_file_t* file,
|
||||
bool shutdown)
|
||||
@ -2053,7 +2002,7 @@ void skygw_file_close(
|
||||
}
|
||||
fd = fileno(file->sf_file);
|
||||
fsync(fd);
|
||||
|
||||
|
||||
if ((err = fclose(file->sf_file)) != 0)
|
||||
{
|
||||
fprintf(stderr,
|
||||
@ -2065,8 +2014,7 @@ void skygw_file_close(
|
||||
else
|
||||
{
|
||||
ss_dfprintf(stderr, "Closed %s\n", file->sf_fname);
|
||||
free(file->sf_fname);
|
||||
free(file);
|
||||
skygw_file_free (file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -80,6 +80,75 @@ struct mlist_node_st {
|
||||
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;
|
||||
|
||||
|
||||
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
|
||||
|
||||
slist_cursor_t* slist_init(void);
|
||||
@ -147,6 +216,8 @@ EXTERN_C_BLOCK_END
|
||||
/** Skygw thread routines */
|
||||
|
||||
/** Skygw file routines */
|
||||
skygw_file_t* skygw_file_alloc(char* fname);
|
||||
void skygw_file_free(skygw_file_t* file);
|
||||
skygw_file_t* skygw_file_init(char* fname, char* symlinkname);
|
||||
void skygw_file_close(skygw_file_t* file, bool shutdown);
|
||||
int skygw_file_write(
|
||||
|
||||
Reference in New Issue
Block a user