FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > CentOS > CentOS

 
 
LinkBack Thread Tools
 
Old 02-23-2010, 12:35 PM
Ales Kozumplik
 
Default Make loader log into syslog (so remote logging works for it as well) (#524980)

---
loader/loader.c | 2 --
loader/log.c | 54 +++++++++++++++++++++++++++++++++++++++++-------------
2 files changed, 41 insertions(+), 15 deletions(-)

diff --git a/loader/loader.c b/loader/loader.c
index b42eb71..0c05c3c 100644
--- a/loader/loader.c
+++ b/loader/loader.c
@@ -38,7 +38,6 @@
#include <stdlib.h>
#include <string.h>
#include <strings.h>
-#include <syslog.h>
#include <unistd.h>
#include <stdint.h>
#include <dirent.h>
@@ -1933,7 +1932,6 @@ int main(int argc, char ** argv) {
#endif

openLog();
- openlog("loader", 0, LOG_LOCAL0);

/* XXX if RHEL, enable the AUTODD feature by default,
* but we should come with more general way how to control this */
diff --git a/loader/log.c b/loader/log.c
index 0d1fa98..01abae8 100644
--- a/loader/log.c
+++ b/loader/log.c
@@ -30,12 +30,41 @@
#include <time.h>
#include <unistd.h>
#include <sys/time.h>
+#include <syslog.h>

#include "log.h"

static FILE * tty_logfile = NULL;
static FILE * file_logfile = NULL;
static int minLevel = INFO;
+static const char * syslog_facility = "loader";
+
+/* maps our loglevel to syslog loglevel */
+static int mapLogLevel(int level)
+{
+ int syslog_level;
+ switch (level) {
+ case DEBUGLVL:
+ syslog_level = LOG_DEBUG;
+ break;
+ case INFO:
+ syslog_level = LOG_INFO;
+ break;
+ case WARNING:
+ syslog_level = LOG_WARNING;
+ break;
+ case CRITICAL:
+ syslog_level = LOG_CRIT;
+ break;
+ case ERROR:
+ default:
+ /* if someone called us with an invalid level value, log it as an error
+ too. */
+ syslog_level = LOG_ERR;
+ break;
+ }
+ return syslog_level;
+}

static void printLogHeader(int level, FILE *outfile) {
struct timeval current_time;
@@ -74,34 +103,28 @@ static void printLogHeader(int level, FILE *outfile) {
}

void logMessageV(int level, const char * s, va_list ap) {
+ va_list apc;
+ va_copy(apc, ap);
+ /* Log everything into syslog */
+ vsyslog(mapLogLevel(level), s, apc);

/* Only log to the screen things that are above the minimum level. */
if (tty_logfile && level >= minLevel) {
- va_list apc;
-
- va_copy(apc, ap);
-
printLogHeader(level, tty_logfile);
vfprintf(tty_logfile, s, apc);
fprintf(tty_logfile, "
");
fflush(tty_logfile);
-
- va_end(apc);
}

/* But log everything to the file. */
if (file_logfile) {
- va_list apc;
-
- va_copy(apc, ap);
-
printLogHeader(level, file_logfile);
vfprintf(file_logfile, s, apc);
fprintf(file_logfile, "
");
fflush(file_logfile);
-
- va_end(apc);
}
+
+ va_end(apc);
}

void logMessage(int level, const char * s, ...) {
@@ -116,8 +139,11 @@ int tty_logfd = -1;
int file_logfd = -1;

void openLog() {
- int flags;
+ /* init syslog logging (so loader messages can also be forwarded to a remote
+ syslog daemon */
+ openlog(syslog_facility, 0, LOG_LOCAL1);

+ int flags;
tty_logfile = fopen("/dev/tty3", "w");
file_logfile = fopen("/tmp/anaconda.log", "w");

@@ -140,6 +166,8 @@ void closeLog(void) {

if (file_logfile)
fclose(file_logfile);
+ /* close syslog logger */
+ closelog();
}

/* set the level. higher means you see more verbosity */
--
1.6.6

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@redhat.com
https://www.redhat.com/mailman/listinfo/anaconda-devel-list
 

Thread Tools




All times are GMT. The time now is 01:24 PM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org