This is the mail archive of the cluster-cvs@sourceware.org mailing list for the cluster.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

cluster: master - liblogthread: new options


Gitweb:        http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=b4263de45e91f5c73f7109919221f652c6f7a8af
Commit:        b4263de45e91f5c73f7109919221f652c6f7a8af
Parent:        9480844dcc52b2430d57658765a2aa2c205d46d2
Author:        David Teigland <teigland@redhat.com>
AuthorDate:    Tue Nov 18 15:07:52 2008 -0600
Committer:     David Teigland <teigland@redhat.com>
CommitterDate: Wed Nov 19 13:38:10 2008 -0600

liblogthread: new options

Changes per recent discussion on cluster-devel mailing list.

Signed-off-by: David Teigland <teigland@redhat.com>
---
 common/liblogthread/liblogthread.c |   94 +++++++++++++++++++-----------------
 common/liblogthread/liblogthread.h |   12 ++--
 2 files changed, 55 insertions(+), 51 deletions(-)

diff --git a/common/liblogthread/liblogthread.c b/common/liblogthread/liblogthread.c
index d8930aa..ba89978 100644
--- a/common/liblogthread/liblogthread.c
+++ b/common/liblogthread/liblogthread.c
@@ -28,30 +28,33 @@ static pthread_t thread_handle;
 static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
 static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
 
-static int logt_mode;
-static int logt_facility;
-static int logt_priority;
+static int logt_mode; /* LOG_MODE_ */
+static int logt_syslog_facility;
+static int logt_syslog_priority;
+static int logt_logfile_priority;
 static char logt_name[PATH_MAX];
-static char logt_file[PATH_MAX];
-static FILE *logt_file_fp;
+static char logt_logfile[PATH_MAX];
+static FILE *logt_logfile_fp;
 
+static char *_time(void)
+{
+	static char buf[64];
+	time_t t = time(NULL);
+
+	strftime(buf, sizeof(buf), "%b %d %T", localtime(&t));
+	return buf;
+}
 
 static void write_entry(int level, char *str)
 {
-	if (logt_mode & LOG_MODE_OUTPUT_FILE && logt_file_fp) {
-		fprintf(logt_file_fp, "%s %s", logt_name, str);
-		fflush(logt_file_fp);
-	}
-	if (logt_mode & LOG_MODE_OUTPUT_STDERR) {
-		fprintf(stderr, "%s", str);
-		fflush(stderr);
+	if ((logt_mode & LOG_MODE_OUTPUT_FILE) &&
+	    (level <= logt_logfile_priority) && logt_logfile_fp) {
+		fprintf(logt_logfile_fp, "%s %s %s", _time(), logt_name, str);
+		fflush(logt_logfile_fp);
 	}
-	if (logt_mode & LOG_MODE_OUTPUT_SYSLOG_THREADED) {
-		if ((logt_mode & LOG_MODE_FILTER_DEBUG_FROM_SYSLOG) &&
-		    (level == LOG_DEBUG))
-			return;
+	if ((logt_mode & LOG_MODE_OUTPUT_SYSLOG) &&
+	    (level <= logt_syslog_priority))
 		syslog(level, "%s", str);
-	}
 }
 
 static void write_dropped(int level, int num)
@@ -120,7 +123,7 @@ void logt_print(int level, char *fmt, ...)
 {
 	va_list ap;
 
-	if (level > logt_priority)
+	if (level > logt_syslog_priority && level > logt_logfile_priority)
 		return;
 
 	va_start(ap, fmt);
@@ -128,47 +131,53 @@ void logt_print(int level, char *fmt, ...)
 	va_end(ap);
 }
 
-static void _conf(char *name, int mode, int facility, int priority, char *file)
+static void _conf(char *name, int mode, int syslog_facility,
+		  int syslog_priority, int logfile_priority, char *logfile)
 {
 	int fd;
 
 	pthread_mutex_lock(&mutex);
 	logt_mode = mode;
-	logt_facility = facility;
-	logt_priority = priority;
+	logt_syslog_facility = syslog_facility;
+	logt_syslog_priority = syslog_priority;
+	logt_logfile_priority = logfile_priority;
 	if (name)
 		strncpy(logt_name, name, PATH_MAX);
-	if (file)
-		strncpy(logt_file, file, PATH_MAX);
-
-	if (logt_mode & LOG_MODE_OUTPUT_FILE && logt_file[0]) {
-		if (logt_file_fp)
-			fclose(logt_file_fp);
-		logt_file_fp = fopen(logt_file, "a+");
-		if (logt_file_fp != NULL) {
-			fd = fileno(logt_file_fp);
+	if (logfile)
+		strncpy(logt_logfile, logfile, PATH_MAX);
+
+	if (logt_mode & LOG_MODE_OUTPUT_FILE && logt_logfile[0]) {
+		if (logt_logfile_fp)
+			fclose(logt_logfile_fp);
+		logt_logfile_fp = fopen(logt_logfile, "a+");
+		if (logt_logfile_fp != NULL) {
+			fd = fileno(logt_logfile_fp);
 			fcntl(fd, F_SETFD, fcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
 		}
 	}
 
-	if (logt_mode & LOG_MODE_OUTPUT_SYSLOG_THREADED) {
+	if (logt_mode & LOG_MODE_OUTPUT_SYSLOG) {
 		closelog();
-		openlog(logt_name, LOG_CONS | LOG_PID, logt_facility);
+		openlog(logt_name, LOG_CONS | LOG_PID, logt_syslog_facility);
 	}
 	pthread_mutex_unlock(&mutex);
 }
 
-void logt_conf(char *name, int mode, int facility, int priority, char *file)
+void logt_conf(char *name, int mode, int syslog_facility, int syslog_priority,
+	       int logfile_priority, char *logfile)
 {
-	_conf(name, mode, facility, priority, file);
+	_conf(name, mode, syslog_facility, syslog_priority, logfile_priority,
+	      logfile);
 }
 
-int logt_init(char *name, int mode, int facility, int priority, char *file)
+int logt_init(char *name, int mode, int syslog_facility, int syslog_priority,
+	      int logfile_priority, char *logfile)
 {
 	pthread_attr_t attr;
 	int rv;
 
-	_conf(name, mode, facility, priority, file);
+	_conf(name, mode, syslog_facility, syslog_priority, logfile_priority,
+	      logfile);
 
 	ents = malloc(num_ents * sizeof(struct entry));
 	if (!ents)
@@ -208,16 +217,11 @@ void logt_exit(void)
 #ifdef TEST
 int main(int argc, char **argv)
 {
-	logt_init("test", 0xF, LOG_DAEMON, LOG_DEBUG, "/tmp/logthread");
-
-	logt_print(1, "first message %d\n", argc);
-	logt_print(2, "%ld second %d %s\n", time(NULL), 2, "hi");
-	sleep(1);
-	logt_print(3, "third message\n");
-
+	logt_init("test", LOG_MODE_OUTPUT_FILE|LOG_MODE_OUTPUT_SYSLOG,
+		  LOG_DAEMON, LOG_DEBUG, LOG_DEBUG, "/tmp/logthread");
+	logt_print(LOG_DEBUG, "test debugging message %d\n", argc);
+	logt_print(LOG_ERR, "test error message %d\n", argc);
 	logt_exit();
-
-	fflush(stdout);
 	return 0;
 }
 #endif
diff --git a/common/liblogthread/liblogthread.h b/common/liblogthread/liblogthread.h
index 0664431..41459ac 100644
--- a/common/liblogthread/liblogthread.h
+++ b/common/liblogthread/liblogthread.h
@@ -3,13 +3,13 @@
 
 #include <syslog.h>
 
-#define LOG_MODE_OUTPUT_FILE			1
-#define LOG_MODE_OUTPUT_STDERR			2
-#define LOG_MODE_OUTPUT_SYSLOG_THREADED		4
-#define LOG_MODE_FILTER_DEBUG_FROM_SYSLOG	8
+#define LOG_MODE_OUTPUT_FILE	1
+#define LOG_MODE_OUTPUT_SYSLOG	2
 
-int logt_init(char *name, int mode, int facility, int priority, char *file);
-void logt_conf(char *name, int mode, int facility, int priority, char *file);
+int logt_init(char *name, int mode, int syslog_facility, int syslog_priority,
+	      int logfile_priority, char *logfile);
+void logt_conf(char *name, int mode, int syslog_facility, int syslog_priority,
+	       int logfile_priority, char *logfile);
 void logt_exit(void);
 void logt_print(int level, char *fmt, ...)
 	__attribute__((format(printf, 2, 3)));;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]