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:
Bala.FA 2013-08-09 16:51:11 +05:30 committed by Vijay Bellur
parent a1fe3d040a
commit 4e63eafaed
7 changed files with 66 additions and 30 deletions

View File

@ -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;
}

View File

@ -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;

View File

@ -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.

View File

@ -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;

View File

@ -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

View File

@ -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);

View File

@ -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 :