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 > Redhat > Fedora Development

 
 
LinkBack Thread Tools
 
Old 03-08-2010, 11:13 AM
Martin Sivak
 
Default allow logging into program.log and syslog through log.c

This looks fine. Martin

----- "Ales Kozumplik" <akozumpl@redhat.com> wrote:

> ---
> isys/log.c | 82
> ++++++++++++++++++++++++++++++++++++++++++++++--------------
> isys/log.h | 13 +++++++--
> 2 files changed, 73 insertions(+), 22 deletions(-)
>
> diff --git a/isys/log.c b/isys/log.c
> index 2f921ba..da39c7b 100644
> --- a/isys/log.c
> +++ b/isys/log.c
> @@ -36,8 +36,11 @@
>
> static FILE * main_log_tty = NULL;
> static FILE * main_log_file = NULL;
> +static FILE * program_log_file = NULL;
> static int minLevel = INFO;
> -static const char * syslog_facility = "loader";
> +static const char * main_tag = "loader";
> +static const char * program_tag = "program";
> +static const int syslog_facility = LOG_LOCAL0;
>
> /* maps our loglevel to syslog loglevel */
> static int mapLogLevel(int level)
> @@ -59,7 +62,7 @@ static int mapLogLevel(int level)
> }
> }
>
> -static void printLogHeader(int level, FILE *outfile) {
> +static void printLogHeader(int level, const char *tag, FILE *outfile)
> {
> struct timeval current_time;
> struct tm *t;
> int msecs;
> @@ -70,44 +73,63 @@ static void printLogHeader(int level, FILE
> *outfile) {
> switch (level) {
> case DEBUGLVL:
> fprintf (outfile, "%02d:%02d:%02d,%03d DEBUG %s: ",
> t->tm_hour,
> - t->tm_min, t->tm_sec, msecs, syslog_facility);
> + t->tm_min, t->tm_sec, msecs, tag);
> break;
>
> case INFO:
> fprintf (outfile, "%02d:%02d:%02d,%03d INFO %s: ",
> t->tm_hour,
> - t->tm_min, t->tm_sec, msecs, syslog_facility);
> + t->tm_min, t->tm_sec, msecs, tag);
> break;
>
> case WARNING:
> fprintf (outfile, "%02d:%02d:%02d,%03d WARNING %s: ",
> t->tm_hour,
> - t->tm_min, t->tm_sec, msecs, syslog_facility);
> + t->tm_min, t->tm_sec, msecs, tag);
> break;
>
> case ERROR:
> fprintf (outfile, "%02d:%02d:%02d,%03d ERROR %s: ",
> t->tm_hour,
> - t->tm_min, t->tm_sec, msecs, syslog_facility);
> + t->tm_min, t->tm_sec, msecs, tag);
> break;
>
> case CRITICAL:
> fprintf (outfile, "%02d:%02d:%02d,%03d CRITICAL %s: ",
> t->tm_hour,
> - t->tm_min, t->tm_sec, msecs, syslog_facility);
> + t->tm_min, t->tm_sec, msecs, tag);
> break;
> }
> }
>
> -static void printLogMessage(int level, FILE *outfile, const char *s,
> va_list ap) {
> - printLogHeader(level, outfile);
> +static void printLogMessage(int level, const char *tag, FILE
> *outfile, const char *s, va_list ap)
> +{
> + printLogHeader(level, tag, outfile);
>
> va_list apc;
> va_copy(apc, ap);
> - vfprintf(main_log_tty, s, apc);
> + vfprintf(outfile, s, apc);
> va_end(apc);
>
> fprintf(outfile, "
");
> fflush(outfile);
> }
>
> -void logMessageV(int level, const char * s, va_list ap) {
> +static void retagSyslog(const char* new_tag)
> +{
> + closelog();
> + openlog(new_tag, 0, syslog_facility);
> +}
> +
> +void logMessageV(enum logger_t logger, int level, const char * s,
> va_list ap) {
> + FILE *log_tty = main_log_tty;
> + FILE *log_file = main_log_file;
> + const char *tag = main_tag;
> + if (logger == PROGRAM_LOG) {
> + /* tty output is done directly for programs */
> + log_tty = NULL;
> + log_file = program_log_file;
> + tag = program_tag;
> + /* close and reopen syslog so we get the tagging right */
> + retagSyslog(tag);
> + }
> +
> va_list apc;
> /* Log everything into syslog */
> va_copy(apc, ap);
> @@ -115,21 +137,33 @@ void logMessageV(int level, const char * s,
> va_list ap) {
> va_end(apc);
>
> /* Only log to the screen things that are above the minimum
> level. */
> - if (main_log_tty && level >= minLevel) {
> - printLogMessage(level, main_log_tty, s, ap);
> + if (main_log_tty && level >= minLevel && log_tty) {
> + printLogMessage(level, tag, log_tty, s, ap);
> }
>
> /* But log everything to the file. */
> if (main_log_file) {
> - printLogMessage(level, main_log_file, s, ap);
> + printLogMessage(level, tag, log_file, s, ap);
> }
> +
> + /* change the syslog tag back to the default again */
> + if (logger == PROGRAM_LOG)
> + retagSyslog(main_tag);
> }
>
> void logMessage(int level, const char * s, ...) {
> va_list args;
>
> va_start(args, s);
> - logMessageV(level, s, args);
> + logMessageV(MAIN_LOG, level, s, args);
> + va_end(args);
> +}
> +
> +void logProgramMessage(int level, const char * s, ...) {
> + va_list args;
> +
> + va_start(args, s);
> + logMessageV(PROGRAM_LOG, level, s, args);
> va_end(args);
> }
>
> @@ -139,11 +173,12 @@ int file_logfd = -1;
> void openLog() {
> /* init syslog logging (so loader messages can also be forwarded
> to a remote
> syslog daemon */
> - openlog(syslog_facility, 0, LOG_LOCAL1);
> + openlog(main_tag, 0, syslog_facility);
>
> int flags;
> - main_log_tty = fopen("/dev/tty3", "w");
> - main_log_file = fopen("/tmp/anaconda.log", "w");
> + main_log_tty = fopen("/dev/tty3", "a");
> + main_log_file = fopen("/tmp/anaconda.log", "a");
> + program_log_file = fopen("/tmp/program.log", "a");
>
> if (main_log_tty) {
> tty_logfd = fileno(main_log_tty);
> @@ -156,14 +191,23 @@ void openLog() {
> flags = fcntl(file_logfd, F_GETFD, 0) | FD_CLOEXEC;
> fcntl(file_logfd, F_SETFD, flags);
> }
> +
> + if (program_log_file) {
> + int fd;
> + fd = fileno(program_log_file);
> + flags = fcntl(fd, F_GETFD, 0) | FD_CLOEXEC;
> + fcntl(file_logfd, F_SETFD, flags);
> + }
> }
>
> void closeLog(void) {
> if (main_log_tty)
> fclose(main_log_tty);
> -
> if (main_log_file)
> fclose(main_log_file);
> + if (program_log_file)
> + fclose(program_log_file);
> +
> /* close syslog logger */
> closelog();
> }
> diff --git a/isys/log.h b/isys/log.h
> index 183c0b2..51de2de 100644
> --- a/isys/log.h
> +++ b/isys/log.h
> @@ -29,10 +29,17 @@
> #define ERROR 40
> #define CRITICAL 50
>
> -void logMessageV(int level, const char * s, va_list ap)
> - __attribute__ ((format (printf, 2, 0)));
> +enum logger_t {
> + MAIN_LOG = 1,
> + PROGRAM_LOG = 2
> +};
> +
> +void logMessageV(enum logger_t logger, int level, const char * s,
> va_list ap)
> + __attribute__ ((format (printf, 3, 0)));
> void logMessage(int level, const char * s, ...)
> - __attribute__ ((format (printf, 2, 3)));
> + __attribute__ ((format (printf, 2, 3)));
> +void logProgramMessage(int level, const char * s, ...)
> + __attribute__ ((format (printf, 2, 3)));
> void openLog();
> void closeLog(void);
> void setLogLevel(int minLevel);
> --
> 1.6.6
>
> _______________________________________________
> Anaconda-devel-list mailing list
> Anaconda-devel-list@redhat.com
> https://www.redhat.com/mailman/listinfo/anaconda-devel-list

_______________________________________________
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 09:10 AM.

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