2 Logging facilities for displaying information on screen, as well as
3 (optional) storing it to a file and transmitting it over the network.
5 Part of the swftools package.
7 Copyright (c) 2001 Matthias Kramm <kramm@quiss.org>
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
30 #endif // _MSC_VER > 1000
41 static int screenloglevel = 1;
42 static int fileloglevel = -1;
43 static FILE *logFile = 0;
44 static int maxloglevel = 1;
46 int getScreenLogLevel()
48 return screenloglevel;
51 void setConsoleLogging(int level)
55 screenloglevel = level;
57 void setFileLogging(char*filename, int level, char append)
62 fclose(logFile);logFile=0;
64 if(filename && level>=0) {
65 logFile = fopen(filename, append?"ab+":"wb");
73 void initLog(char* filename, int fileloglevel, char* s00, char* s01, int s02, int screenlevel)
75 setFileLogging(filename, fileloglevel, 0);
76 setConsoleLogging(screenloglevel);
91 static char * logimportance[]= {"Fatal","Error","Warning","Notice","Verbose","Debug","Trace"};
92 static int loglevels=7;
93 static char * logimportance2[]= {" ","FATAL ","ERROR ","WARNING","NOTICE ","VERBOSE","DEBUG ", "TRACE "};
95 static inline void log(const char* logString)
106 logBuffer = (char*)malloc (strlen(logString) + 24 + 15);
109 /*time_t t = time(0);
110 tm*t2 = localtime(t);
111 strftime(dbuffer, 8, "%m %d", t2);
112 strftime(tbuffer, 8, "%m %d", t2);
113 dbuffer[0]=0; //FIXME
118 while(a[l-1] == 13 || a[l-1] == 10)
121 sprintf(timebuffer, "%s", a);
126 sprintf(timebuffer, "%s - %s",dbuffer,tbuffer);
129 // search for <level> field
131 lt=strchr(logString, '<');
132 gt=strchr(logString, '>');
133 if(lt && gt && lt<gt)
136 for(t=0;t<loglevels;t++)
139 if(!strncasecmp(lt+1,logimportance[t],strlen(logimportance[t])))
141 if(!strnicmp(lt+1,logimportance[t],strlen(logimportance[t])))
145 while(logString[0]==' ') logString ++;
152 // sprintf(logBuffer, "%s: %s %s", timebuffer, logimportance2[level + 1],logString);
153 sprintf(logBuffer, "%s %s", logimportance2[level + 1],logString);
155 // we always do exactly one newline.
157 l=strlen(logBuffer)-1;
158 while((logBuffer[l]==13 || logBuffer[l]==10) && l>=0)
164 if (level <= screenloglevel)
166 printf("%s\n", logBuffer);
170 if (level <= fileloglevel)
174 fprintf(logFile, "%s\n", logBuffer);
182 void msg_str(const char* buf)
186 char*x = strchr(z,buf[1]);
187 if(x && (x-z)>maxloglevel)
192 void msg(const char* format, ...)
196 va_start(arglist, format);
201 char*x = strchr(z,format[1]);
202 if(x && (x-z)>maxloglevel)
206 vsprintf(buf, format, arglist);