mirror of
https://github.com/gluster/glusterfs.git
synced 2026-02-06 18:48:16 +01:00
libglusterfs devel package headers are referenced in code using include semantics for a program, this while it works can be better especially when dealing with out of tree xlator builds or in general out of tree devel package usage. Towards this, the following changes are done, - moved all devel headers under a glusterfs directory - Included these headers using system header notation <> in all code outside of libglusterfs - Included these headers using own program notation "" within libglusterfs This change although big, is just moving around the headers and making it correct when including these headers from other sources. This helps us correctly include libglusterfs includes without namespace conflicts. Change-Id: Id2a98854e671a7ee5d73be44da5ba1a74252423b Updates: bz#1193929 Signed-off-by: ShyamsundarR <srangana@redhat.com>
215 lines
6.9 KiB
C
215 lines
6.9 KiB
C
/*
|
|
* Copyright (c) 2013 Red Hat, Inc. <http://www.redhat.com>
|
|
* This file is part of GlusterFS.
|
|
*
|
|
* This file is licensed to you under your choice of the GNU Lesser
|
|
* General Public License, version 3 or any later version (LGPLv3 or
|
|
* later), or the GNU General Public License, version 2 (GPLv2), in all
|
|
* cases as published by the Free Software Foundation.
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <unistd.h>
|
|
|
|
#include <glusterfs/glusterfs.h>
|
|
#include <glusterfs/globals.h>
|
|
#include <glusterfs/logging.h>
|
|
|
|
#include "logchecks-messages.h"
|
|
#include "../../libglusterfs/src/logging.h"
|
|
|
|
glusterfs_ctx_t *ctx = NULL;
|
|
|
|
#define TEST_FILENAME "/tmp/logchecks.log"
|
|
#define GF_LOG_CONTROL_FILE "/etc/glusterfs/logger.conf"
|
|
|
|
int
|
|
go_log_vargs(gf_loglevel_t level, const char *fmt, ...)
|
|
{
|
|
va_list ap;
|
|
|
|
va_start(ap, fmt);
|
|
gf_msg_vplain(level, fmt, ap);
|
|
va_end(ap);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int
|
|
go_log(void)
|
|
{
|
|
/*** gf_msg ***/
|
|
gf_msg("logchecks", GF_LOG_INFO, 0, logchecks_msg_1);
|
|
gf_msg("logchecks", GF_LOG_INFO, 22, logchecks_msg_2, 42, "Forty-Two", 42);
|
|
/* change criticality */
|
|
gf_msg("logchecks", GF_LOG_CRITICAL, 0, logchecks_msg_3);
|
|
gf_msg("logchecks", GF_LOG_CRITICAL, 22, logchecks_msg_4, 42, "Forty-Two",
|
|
42);
|
|
|
|
/*** msg_nomem ***/
|
|
gf_msg_nomem("logchecks", GF_LOG_ALERT, 555);
|
|
gf_msg_nomem("logchecks", GF_LOG_INFO, 555);
|
|
|
|
/*** msg_plain ***/
|
|
gf_msg_plain(GF_LOG_INFO,
|
|
"Informational: gf_msg_plain with"
|
|
" args %d:%s:%x",
|
|
42, "Forty-Two", 42);
|
|
gf_msg_plain(GF_LOG_ALERT,
|
|
"Alert: gf_msg_plain with"
|
|
" args %d:%s:%x",
|
|
42, "Forty-Two", 42);
|
|
|
|
/*** msg_vplain ***/
|
|
go_log_vargs(GF_LOG_INFO, "Informational: gf_msg_vplain: No args!!!");
|
|
go_log_vargs(GF_LOG_INFO,
|
|
"Informational: gf_msg_vplain: Some"
|
|
" args %d:%s:%x",
|
|
42, "Forty-Two", 42);
|
|
go_log_vargs(GF_LOG_INFO, "Critical: gf_msg_vplain: No args!!!");
|
|
go_log_vargs(GF_LOG_INFO,
|
|
"Critical: gf_msg_vplain: Some"
|
|
" args %d:%s:%x",
|
|
42, "Forty-Two", 42);
|
|
|
|
/*** msg_plain_nomem ***/
|
|
gf_msg_plain_nomem(GF_LOG_INFO, "Informational: gf_msg_plain_nomem");
|
|
gf_msg_plain_nomem(GF_LOG_ALERT, "Alert: gf_msg_plain_nomem");
|
|
|
|
/*** msg_backtrace_nomem ***/
|
|
// TODO: Need to create a stack depth and then call
|
|
gf_msg_backtrace_nomem(GF_LOG_INFO, 5);
|
|
gf_msg_backtrace_nomem(GF_LOG_ALERT, 5);
|
|
|
|
/*** gf_msg_callingfn ***/
|
|
// TODO: Need to create a stack depth and then call
|
|
gf_msg_callingfn("logchecks", GF_LOG_INFO, 0, logchecks_msg_7);
|
|
gf_msg_callingfn("logchecks", GF_LOG_INFO, 0, logchecks_msg_8, 42,
|
|
"Forty-Two", 42);
|
|
gf_msg_callingfn("logchecks", GF_LOG_CRITICAL, 0, logchecks_msg_9);
|
|
gf_msg_callingfn("logchecks", GF_LOG_CRITICAL, 0, logchecks_msg_10, 42,
|
|
"Forty-Two", 42);
|
|
|
|
/*** gf_msg_debug ***/
|
|
gf_msg_debug("logchecks", 0, "Debug: Hello World!!!");
|
|
gf_msg_debug("logchecks", 22, "Debug: With args %d:%s:%x", 42, "Forty-Two",
|
|
42);
|
|
|
|
/*** gf_msg_trace ***/
|
|
gf_msg_trace("logchecks", 0, "Trace: Hello World!!!");
|
|
gf_msg_trace("logchecks", 22, "Trace: With args %d:%s:%x", 42, "Forty-Two",
|
|
42);
|
|
|
|
/*** gf_msg_backtrace ***/
|
|
// TODO: Test with lower callstr values to check truncation
|
|
|
|
return 0;
|
|
}
|
|
|
|
int
|
|
main(int argc, char *argv[])
|
|
{
|
|
int ret = -1;
|
|
|
|
unlink(GF_LOG_CONTROL_FILE);
|
|
creat(GF_LOG_CONTROL_FILE, O_RDONLY);
|
|
ctx = glusterfs_ctx_new();
|
|
if (!ctx)
|
|
return -1;
|
|
|
|
ret = glusterfs_globals_init(ctx);
|
|
if (ret) {
|
|
printf("Error from glusterfs_globals_init [%s]\n", strerror(errno));
|
|
return ret;
|
|
}
|
|
|
|
/* Pre init test, message should not be printed */
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_19);
|
|
|
|
THIS->ctx = ctx;
|
|
|
|
/* TEST 1: messages before initializing the log, goes to stderr
|
|
* and syslog based on criticality */
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_12);
|
|
go_log();
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);
|
|
|
|
/* TEST 2: messages post initialization, goes to glusterlog and
|
|
* syslog based on severity */
|
|
ret = gf_log_init(ctx, TEST_FILENAME, "logchecks");
|
|
if (ret != 0) {
|
|
printf("Error from gf_log_init [%s]\n", strerror(errno));
|
|
return -1;
|
|
}
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_13);
|
|
go_log();
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);
|
|
|
|
/* TEST 3: Test rotation */
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);
|
|
gf_log_logrotate(0);
|
|
gf_msg("logchecks", GF_LOG_CRITICAL, 0, logchecks_msg_5);
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);
|
|
|
|
/* TEST 4: Check flush, nothing noticeable should occur :) */
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);
|
|
gf_log_flush();
|
|
gf_msg("logchecks", GF_LOG_CRITICAL, 0, logchecks_msg_6);
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);
|
|
|
|
/* TEST 5: Change format */
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);
|
|
gf_log_set_logformat(gf_logformat_traditional);
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_14);
|
|
go_log();
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);
|
|
|
|
/* TEST 6: Change level */
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);
|
|
gf_log_set_loglevel(ctx, GF_LOG_CRITICAL);
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_15);
|
|
go_log();
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);
|
|
|
|
/* Reset to run with syslog */
|
|
gf_log_set_logformat(gf_logformat_withmsgid);
|
|
gf_log_set_loglevel(ctx, GF_LOG_INFO);
|
|
|
|
/* Run tests with logger changed to syslog */
|
|
/* TEST 7: No more gluster logs */
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);
|
|
gf_log_set_logger(gf_logger_syslog);
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_16);
|
|
go_log();
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);
|
|
|
|
/* TEST 8: Change format */
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);
|
|
gf_log_set_logformat(gf_logformat_traditional);
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_14);
|
|
go_log();
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);
|
|
|
|
/* TEST 9: Change level */
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);
|
|
gf_log_set_loglevel(ctx, GF_LOG_CRITICAL);
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_15);
|
|
go_log();
|
|
gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);
|
|
|
|
// TODO: signal crash prints, but not yet feasible here
|
|
// TODO: Graph printing
|
|
// TODO: Multi threaded logging
|
|
|
|
/* Close out the logging */
|
|
gf_log_fini(ctx);
|
|
gf_log_globals_fini();
|
|
|
|
unlink(GF_LOG_CONTROL_FILE);
|
|
unlink(TEST_FILENAME);
|
|
|
|
return 0;
|
|
}
|