log: set ident to openlog
at syslog side, log message is identified by its properties like programname, pid, etc. brick/mount processes need to be identified uniquely as they are different process of gluterfsd/glusterfs. At rsyslog side, log separated by programname/app-name with pid works but bit hard to identify them in long run which process is for what brick/mount. This patch fixes by setting identity string at openlog() which sets programname/app-name as similar to old style log file prefixed by gluster, glusterd, glusterfs or glusterfsd Change-Id: Ia05068943fa67ae1663aaded1444cf84ea648db8 BUG: 928648 Signed-off-by: Bala.FA <barumuga@redhat.com> Reviewed-on: http://review.gluster.org/5541 Reviewed-by: Vijay Bellur <vbellur@redhat.com> Tested-by: Gluster Build System <jenkins@build.gluster.com>
This commit is contained in:
parent
a1fe3d040a
commit
4e63eafaed
@ -477,7 +477,8 @@ glfs_set_logging (struct glfs *fs, const char *logfile, int loglevel)
|
||||
int ret = 0;
|
||||
|
||||
if (logfile) {
|
||||
ret = gf_log_init (fs->ctx, logfile);
|
||||
/* passing ident as NULL means to use default ident for syslog */
|
||||
ret = gf_log_init (fs->ctx, logfile, NULL);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
@ -168,7 +168,8 @@ logging_init (glusterfs_ctx_t *ctx, struct cli_state *state)
|
||||
char *log_file = state->log_file ? state->log_file :
|
||||
DEFAULT_CLI_LOG_FILE_DIRECTORY "/cli.log";
|
||||
|
||||
if (gf_log_init (ctx, log_file) == -1) {
|
||||
/* passing ident as NULL means to use default ident for syslog */
|
||||
if (gf_log_init (ctx, log_file, NULL) == -1) {
|
||||
fprintf (stderr, "ERROR: failed to open logfile %s\n",
|
||||
log_file);
|
||||
return -1;
|
||||
|
@ -55,11 +55,12 @@ gf_syslog (GF_ERR_DEV, LOG_ERR, "error reading configuration file");
|
||||
The logs are sent in CEE format (http://cee.mitre.org/) to syslog.
|
||||
Its targeted to rsyslog syslog server.
|
||||
|
||||
This log framework can be disabled either at compile time or run time
|
||||
This log framework is enabled at compile time by default. This can be
|
||||
disabled by passing '--disable-syslog' to ./configure or '--without
|
||||
syslog' to rpmbuild
|
||||
|
||||
- for compile time by passing '--disable-syslog' to ./configure or
|
||||
'--without syslog' to rpmbuild (or)
|
||||
- for run time by having a file /var/lib/glusterd/logger.conf and
|
||||
restarting gluster services
|
||||
Even though its enabled at compile time, its required to have
|
||||
/var/lib/glusterd/logger.conf file to make it into effect before
|
||||
starting gluster services
|
||||
|
||||
Currently all gluster logs are sent with error code GF_ERR_DEV.
|
||||
|
@ -1334,10 +1334,13 @@ out:
|
||||
}
|
||||
|
||||
static int
|
||||
logging_init (glusterfs_ctx_t *ctx)
|
||||
logging_init (glusterfs_ctx_t *ctx, const char *progpath)
|
||||
{
|
||||
cmd_args_t *cmd_args = NULL;
|
||||
int ret = 0;
|
||||
char ident[1024] = {0,};
|
||||
char *progname = NULL;
|
||||
char *ptr = NULL;
|
||||
|
||||
cmd_args = &ctx->cmd_args;
|
||||
|
||||
@ -1349,7 +1352,22 @@ logging_init (glusterfs_ctx_t *ctx)
|
||||
}
|
||||
}
|
||||
|
||||
if (gf_log_init (ctx, cmd_args->log_file) == -1) {
|
||||
#ifdef GF_USE_SYSLOG
|
||||
progname = gf_strdup (progpath);
|
||||
snprintf (ident, 1024, "%s_%s", basename(progname),
|
||||
basename(cmd_args->log_file));
|
||||
GF_FREE (progname);
|
||||
/* remove .log suffix */
|
||||
if (NULL != (ptr = strrchr(ident, '.'))) {
|
||||
if (strcmp(ptr, ".log") == 0) {
|
||||
/* note: ptr points to location in ident only */
|
||||
ptr[0] = '\0';
|
||||
}
|
||||
}
|
||||
ptr = ident;
|
||||
#endif
|
||||
|
||||
if (gf_log_init (ctx, cmd_args->log_file, ptr) == -1) {
|
||||
fprintf (stderr, "ERROR: failed to open logfile %s\n",
|
||||
cmd_args->log_file);
|
||||
return -1;
|
||||
@ -1911,7 +1929,7 @@ main (int argc, char *argv[])
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
ret = logging_init (ctx);
|
||||
ret = logging_init (ctx, argv[0]);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
|
@ -326,6 +326,23 @@ gf_log_globals_init (void *data)
|
||||
ctx->log.gf_log_syslog = 1;
|
||||
ctx->log.sys_log_level = GF_LOG_CRITICAL;
|
||||
|
||||
#ifndef GF_USE_SYSLOG
|
||||
#ifdef GF_LINUX_HOST_OS
|
||||
/* For the 'syslog' output. one can grep 'GlusterFS' in syslog
|
||||
for serious logs */
|
||||
openlog ("GlusterFS", LOG_PID, LOG_DAEMON);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
int
|
||||
gf_log_init (void *data, const char *file, const char *ident)
|
||||
{
|
||||
glusterfs_ctx_t *ctx = NULL;
|
||||
int fd = -1;
|
||||
|
||||
ctx = data;
|
||||
|
||||
#if defined(GF_USE_SYSLOG)
|
||||
{
|
||||
/* use default ident and option */
|
||||
@ -333,26 +350,22 @@ gf_log_globals_init (void *data)
|
||||
struct stat buf;
|
||||
|
||||
if (stat (GF_LOG_CONTROL_FILE, &buf) == 0) {
|
||||
ctx->log.log_control_file_found = 1; /* use gf_log */
|
||||
/* use syslog logging */
|
||||
ctx->log.log_control_file_found = 1;
|
||||
if (ident) {
|
||||
/* we need to keep this value as */
|
||||
/* syslog uses it on every logging */
|
||||
ctx->log.ident = gf_strdup (ident);
|
||||
gf_openlog (ctx->log.ident, -1, LOG_DAEMON);
|
||||
} else {
|
||||
gf_openlog (NULL, -1, LOG_DAEMON);
|
||||
}
|
||||
} else {
|
||||
/* use old style logging */
|
||||
ctx->log.log_control_file_found = 0;
|
||||
gf_openlog (NULL, -1, LOG_DAEMON);
|
||||
}
|
||||
}
|
||||
#elif defined(GF_LINUX_HOST_OS)
|
||||
/* For the 'syslog' output. one can grep 'GlusterFS' in syslog
|
||||
for serious logs */
|
||||
openlog ("GlusterFS", LOG_PID, LOG_DAEMON);
|
||||
#endif
|
||||
}
|
||||
|
||||
int
|
||||
gf_log_init (void *data, const char *file)
|
||||
{
|
||||
glusterfs_ctx_t *ctx = NULL;
|
||||
int fd = -1;
|
||||
|
||||
ctx = data;
|
||||
|
||||
if (!file){
|
||||
fprintf (stderr, "ERROR: no filename specified\n");
|
||||
@ -474,7 +487,7 @@ _gf_log_nomem (const char *domain, const char *file,
|
||||
#endif /* HAVE_BACKTRACE */
|
||||
|
||||
#if defined(GF_USE_SYSLOG)
|
||||
if (!(ctx->log.log_control_file_found))
|
||||
if (ctx->log.log_control_file_found)
|
||||
{
|
||||
int priority;
|
||||
/* treat GF_LOG_TRACE and GF_LOG_NONE as LOG_DEBUG and
|
||||
@ -609,7 +622,7 @@ _gf_log_callingfn (const char *domain, const char *file, const char *function,
|
||||
#endif /* HAVE_BACKTRACE */
|
||||
|
||||
#if defined(GF_USE_SYSLOG)
|
||||
if (!(ctx->log.log_control_file_found))
|
||||
if (ctx->log.log_control_file_found)
|
||||
{
|
||||
int priority;
|
||||
/* treat GF_LOG_TRACE and GF_LOG_NONE as LOG_DEBUG and
|
||||
@ -746,7 +759,7 @@ _gf_log (const char *domain, const char *file, const char *function, int line,
|
||||
basename = file;
|
||||
|
||||
#if defined(GF_USE_SYSLOG)
|
||||
if (!(ctx->log.log_control_file_found))
|
||||
if (ctx->log.log_control_file_found)
|
||||
{
|
||||
int priority;
|
||||
/* treat GF_LOG_TRACE and GF_LOG_NONE as LOG_DEBUG and
|
||||
|
@ -74,12 +74,13 @@ typedef struct gf_log_handle_ {
|
||||
FILE *cmdlogfile;
|
||||
#ifdef GF_USE_SYSLOG
|
||||
int log_control_file_found;
|
||||
char *ident;
|
||||
#endif /* GF_USE_SYSLOG */
|
||||
|
||||
} gf_log_handle_t;
|
||||
|
||||
void gf_log_globals_init (void *ctx);
|
||||
int gf_log_init (void *data, const char *filename);
|
||||
int gf_log_init (void *data, const char *filename, const char *ident);
|
||||
|
||||
void gf_log_logrotate (int signum);
|
||||
|
||||
|
@ -467,7 +467,8 @@ gf_changelog_register (char *brick_path, char *scratch_dir,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (gf_log_init (this->ctx, log_file))
|
||||
/* passing ident as NULL means to use default ident for syslog */
|
||||
if (gf_log_init (this->ctx, log_file, NULL))
|
||||
goto cleanup;
|
||||
|
||||
gf_log_set_loglevel ((log_level == -1) ? GF_LOG_INFO :
|
||||
|
Loading…
x
Reference in New Issue
Block a user