X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=lib%2Flog.c;h=e75148f127fce4c13c7b6bcc4868f9b7bb2bcb7b;hp=6c705ee1568534d719657c8b3a795fba62ab3eca;hb=c63b2bf21dc1df9a736f0b4c08f6cba828cdab92;hpb=fc554a43712b76d16b41ec77dd311b4a78b1ef6b diff --git a/lib/log.c b/lib/log.c index 6c705ee..e75148f 100644 --- a/lib/log.c +++ b/lib/log.c @@ -1,252 +1,213 @@ -/* log.c - Logging facilities for displaying information on screen, as well as - (optional) storing it to a file and transmitting it over the network. - - Part of the swftools package. - - Copyright (c) 2001 Matthias Kramm - - This file is distributed under the GPL, see file COPYING for details */ - -#ifdef __NT__ -#include "stdafx.h" -#include -#include -#include -#include -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 -#else -#include -#include -#include -#include -#include -#endif - -#include "log.h" - -#define LOGLEVEL_FATAL 0 -#define LOGLEVEL_ERROR 1 -#define LOGLEVEL_WARNING 2 -#define LOGLEVEL_NOTICE 3 -#define LOGLEVEL_VERBOSE 4 -#define LOGLEVEL_DEBUG 5 - -int screenloglevel; -int fileloglevel; -int socketloglevel; -FILE *logFile = 0; -#ifdef __NT__ -SOCKET logSocket; -#else -int logSocket = 0; -#endif - -char bLogToSock = 0; - -void initlogSocket(char* servAddr, char* logPort); - -void initLog(char* pLogName, int fileloglevel, char* servAddr, char* logPort, int serverlevel, int screenlevel) -{ - screenloglevel = screenlevel; - fileloglevel = fileloglevel; - socketloglevel = screenlevel; - logFile = NULL; - bLogToSock = 0; - - if (pLogName && fileloglevel>=0) - logFile = fopen(pLogName, "a+"); - bLogToSock = (servAddr && logPort && (serverlevel>=0)); - if(bLogToSock) - initlogSocket(servAddr, logPort); -} - -void initlogSocket(char* servAddr, char* logPort) -{ -#ifndef __NT__ - bLogToSock = 0; -#else - // init winsock - // check and prepare WinSock DLL - WORD wVersionRequested = MAKEWORD( 2, 2 ); - WSADATA wsaData; - if ( WSAStartup(wVersionRequested, &wsaData) != 0 ) - { - bLogToSock = false; - return; - } - // Confirm that the WinSock DLL supports 2.2. - // Note that if the DLL supports versions greater - // than 2.2 in addition to 2.2, it will still return - // 2.2 in wVersion since that is the version we - // requested. - - if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 ) - { - bLogToSock = false; - return; - } - - struct hostent *hp; - hp = gethostbyname(servAddr); - if (hp == NULL) // we don't know who this host is - { - bLogToSock = false; - return; - } - - // connect socket - sockaddr_in SocketAddress; - - memset(&SocketAddress, 0, sizeof(SocketAddress)); - memcpy((char*)&SocketAddress.sin_addr, hp->h_addr, hp->h_length); // set address - SocketAddress.sin_family = hp->h_addrtype; - SocketAddress.sin_port = htons((u_short)atoi(logPort)); - - logSocket = socket(hp->h_addrtype, SOCK_STREAM, 0); - if (logSocket == INVALID_SOCKET) - { - bLogToSock = false; - return; - } - - // try to connect to the specified socket - if ( connect(logSocket, (struct sockaddr*)&SocketAddress, sizeof (SocketAddress)) == SOCKET_ERROR) { - bLogToSock = false; - return; - } - bLogToSock = true; -#endif -} - -void exitLog() -{ - // close socket communication - if(bLogToSock) -#ifndef __NT__ - close(logSocket); -#else - closesocket(logSocket); -#endif - // close file - if(logFile != NULL) - fclose(logFile); -} - - -static char * logimportance[]= {"Fatal","Error","Warning","Notice","Verbose","Debug"}; -static int loglevels=6; -static char * logimportance2[]= {" ","FATAL ","ERROR ","WARNING","NOTICE ","VERBOSE","DEBUG "}; -void log(char* logString) -{ - char timebuffer[32]; - char* logBuffer; - char dbuffer[9]; - char tbuffer[9]; - int level; - char*lt; - char*gt; - int l; - - logBuffer = (char*)malloc (strlen(logString) + 24 + 15); -#ifndef __NT__ - { - /*time_t t = time(0); - tm*t2 = localtime(t); - strftime(dbuffer, 8, "%m %d", t2); - strftime(tbuffer, 8, "%m %d", t2); - dbuffer[0]=0; //FIXME - tbuffer[0]=0;*/ - time_t t = time(0); - char* a = ctime(&t); - int l = strlen(a); - while(a[l-1] == 13 || a[l-1] == 10) - l--; - a[l]=0; - sprintf(timebuffer, "%s", a); - } -#else - _strdate( dbuffer ); - _strtime( tbuffer ); - sprintf(timebuffer, "%s - %s",dbuffer,tbuffer); -#endif - - // search for field - level = -1; - lt=strchr(logString, '<'); - gt=strchr(logString, '>'); - if(lt && gt && lt=0) - { - logBuffer[l]=0; - l--; - } - - if (level <= screenloglevel) - { - printf("%s\n", logBuffer); - fflush(stdout); - } - - if (level <= fileloglevel) - { - if (logFile != NULL) - { - fprintf(logFile, "%s\n", logBuffer); - fflush(logFile); - } - } - - if (level <= socketloglevel) - { - if (bLogToSock) - { - // send data -#ifndef __NT__ - write(logSocket, logBuffer, strlen(logBuffer)); -#else - send(logSocket, logBuffer, strlen(logBuffer), 0); -#endif - } - } - free (logBuffer); -} - -void logf(const char* pszFormat, ...) -{ - char buf[1024]; - va_list arglist; - va_start(arglist, pszFormat); - buf[0] = 0; - vsprintf(&buf[strlen(buf)], pszFormat, arglist); - va_end(arglist); - strcat(buf, "\n"); - log(buf); -} - +/* log.c + Logging facilities for displaying information on screen, as well as + (optional) storing it to a file and transmitting it over the network. + + Part of the swftools package. + + Copyright (c) 2001 Matthias Kramm + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#include +#include +#include +#ifdef WIN32 +//#include "stdafx.h" +#include +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 +#else +#include +#include +#endif + +#include "log.h" + +static int screenloglevel = 1; +static int fileloglevel = -1; +static FILE *logFile = 0; +static int maxloglevel = 1; + +int getScreenLogLevel() +{ + return screenloglevel; +} +int getLogLevel() +{ + return maxloglevel; +} + +void setConsoleLogging(int level) +{ + if(level>maxloglevel) + maxloglevel=level; + screenloglevel = level; +} +void setFileLogging(char*filename, int level, char append) +{ + if(level>maxloglevel) + maxloglevel=level; + if(logFile) { + fclose(logFile);logFile=0; + } + if(filename && level>=0) { + logFile = fopen(filename, append?"ab+":"wb"); + fileloglevel = level; + } else { + logFile = 0; + fileloglevel = 0; + } +} +/* deprecated */ +void initLog(char* filename, int filelevel, char* s00, char* s01, int s02, int screenlevel) +{ + setFileLogging(filename, filelevel, 0); + setConsoleLogging(screenlevel); +} + +void exitLog() +{ + // close file + if(logFile != NULL) { + fclose(logFile); + logFile = 0; + fileloglevel = -1; + screenloglevel = 1; + maxloglevel = 1; + } +} + +static char * logimportance[]= {"Fatal","Error","Warning","Notice","Verbose","Debug","Trace"}; +static int loglevels=7; +static char * logimportance2[]= {" ","FATAL ","ERROR ","WARNING","NOTICE ","VERBOSE","DEBUG ", "TRACE "}; + +static inline void log_str(const char* logString) +{ + char timebuffer[32]; + char* logBuffer; + char dbuffer[9]; + char tbuffer[9]; + int level; + char*lt; + char*gt; + int l; + + logBuffer = (char*)malloc (strlen(logString) + 24 + 15); +#ifndef __NT__ + { + /*time_t t = time(0); + tm*t2 = localtime(t); + strftime(dbuffer, 8, "%m %d", t2); + strftime(tbuffer, 8, "%m %d", t2); + dbuffer[0]=0; //FIXME + tbuffer[0]=0;*/ + time_t t = time(0); + char* a = ctime(&t); + int l = strlen(a); + while(a[l-1] == 13 || a[l-1] == 10) + l--; + a[l]=0; + sprintf(timebuffer, "%s", a); + } +#else + _strdate( dbuffer ); + _strtime( tbuffer ); + sprintf(timebuffer, "%s - %s",dbuffer,tbuffer); +#endif + + // search for field + level = -1; + lt=strchr(logString, '<'); + gt=strchr(logString, '>'); + if(lt && gt && lt=0) + { + logBuffer[l]=0; + l--; + } + + if (level <= screenloglevel) + { + printf("%s\n", logBuffer); + fflush(stdout); + } + + if (level <= fileloglevel) + { + if (logFile != NULL) + { + fprintf(logFile, "%s\r\n", logBuffer); + fflush(logFile); + } + } + + free (logBuffer); +} + +void msg_str(const char* buf) +{ + if(buf[0]=='<') { + char*z = "fewnvdt"; + char*x = strchr(z,buf[1]); + if(x && (x-z)>maxloglevel) + return; + } + log_str(buf); +} +void msg(const char* format, ...) +{ + char buf[1024]; + va_list arglist; + va_start(arglist, format); + + /* speed up hack */ + if(format[0]=='<') { + char*z = "fewnvdt"; + char*x = strchr(z,format[1]); + if(x && (x-z)>maxloglevel) + return; + } + + vsnprintf(buf, sizeof(buf)-1, format, arglist); + va_end(arglist); + strcat(buf, "\n"); + log_str(buf); +} +