log.c

Go to the documentation of this file.
00001 /*
00002   mysqlfs - MySQL Filesystem
00003   Copyright (C) 2006 Michal Ludvig <michal@logix.cz>
00004   $Id: log.c,v 1.5 2006/09/13 10:54:37 ludvigm Exp $
00005 
00006   This program can be distributed under the terms of the GNU GPL.
00007   See the file COPYING.
00008 */
00009 
00010 #include <config.h>
00011 
00012 #include <stdio.h>
00013 #include <stdlib.h>
00014 #include <stdarg.h>
00015 #include <string.h>
00016 #include <time.h>
00017 #include <errno.h>
00018 #include <unistd.h>
00019 
00020 #include "log.h"
00021 
00022 FILE *log_file;
00023 //int log_types_mask = LOG_ERROR | LOG_INFO | LOG_DEBUG;
00024 int log_types_mask = LOG_ERROR | LOG_INFO;
00025 //int log_debug_mask = LOG_D_CALL | LOG_D_SQL | LOG_D_OTHER;
00026 //int log_debug_mask = LOG_D_CALL;
00027 int log_debug_mask = 0;
00028 
00029 #define BUFSIZE 512
00030 
00031 static char *currentTS(void)
00032 {
00033         static char buf[BUFSIZE];
00034         time_t curtime;
00035 
00036         bzero(buf, BUFSIZE);
00037         curtime = time(NULL);
00038         strftime(buf, BUFSIZE, "%Y-%m-%d %H:%M:%S", localtime(&curtime));
00039 
00040         return buf;
00041 }
00042 
00043 int log_printf(enum log_types type, const char *logmsg, ...)
00044 {
00045         va_list args;
00046         char buf[BUFSIZE];
00047 
00048         if ((log_types_mask & type & LOG_MASK_MAJOR) == 0)
00049           return 0;
00050 
00051         if ((type & LOG_DEBUG) && (log_debug_mask & type & LOG_MASK_MINOR) == 0)
00052           return 0;
00053 
00054 /*
00055  * Subtypes for INFO and ERROR are not yet defined
00056         if ((type & LOG_INFO) && (log_info_mask & type & LOG_MASK_MINOR) == 0)
00057           return 0;
00058 
00059         if ((type & LOG_ERROR) && (log_error_mask & type & LOG_MASK_MINOR) == 0)
00060           return 0;
00061 */
00062 
00063         bzero(buf, BUFSIZE);
00064         snprintf(buf, BUFSIZE, "%s %d %s", currentTS(), getpid(), logmsg);
00065         va_start(args, logmsg);
00066 
00067         return vfprintf(log_file, buf, args);
00068 }
00069 
00070 FILE *log_init(const char *filename, int verbose)
00071 {
00072         FILE    *f;
00073 
00074     if(!strcmp(filename, "stdout")){
00075         return stdout;
00076     }else if(!strcmp(filename, "stderr")){
00077         return stderr;
00078     }
00079 
00080         if (verbose)
00081                 printf("* Opening logfile '%s': ", filename);
00082 
00083 
00084         if ((f = fopen(filename, "a+")) == NULL)
00085         {
00086                 if (verbose)
00087                         printf("failed: %s\n", strerror(errno));
00088                 exit(1);
00089         }
00090 
00091         setbuf(f, NULL);
00092         if (verbose)
00093                 printf(" OK\n");
00094 
00095         return f;
00096 }
00097 
00098 void log_finish(FILE *f)
00099 {
00100 
00101     if(f == stdout || f == stderr){
00102         return;
00103     }
00104 
00105         fclose(f);
00106 }
00107 

Generated on Sun Jul 12 20:25:26 2009 for mysqlfs by  doxygen 1.4.7