/*************************************************************************** * Copyright (C) 03/2005 by Olaf Rempel * * razzor@kopf-tisch.de * * * * 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 #include #include #include #include "configfile.h" static FILE *log_fd = NULL; /** * log_print() * schreibt eine Zeile ins Logfile oder auf stderr * wenn errno gesetzt ist, wird der error-string mit ausgegeben * * @param fmt variable argumentenliste (syntax wie bei printf) * * @todo code vereinfachen? */ void log_print(const char *fmt, ...) { va_list az; char buffer[256]; va_start(az, fmt); vsprintf(buffer, fmt, az); va_end(az); /* ins logfile loggen */ if (log_fd) { time_t tzgr; char tbuf[64]; time(&tzgr); strftime(tbuf, 64, "%b %d %H:%M:%S :", localtime(&tzgr)); if (errno) { fprintf(log_fd, "%s %s: %s\n", tbuf, buffer, strerror(errno)); } else { fprintf(log_fd, "%s %s\n", tbuf, buffer); } fflush(log_fd); /* nach stderr loggen */ } else { if (errno) { fprintf(stderr, "%s: %s\n", buffer, strerror(errno)); } else { fprintf(stderr, "%s\n", buffer); } } errno = 0; } /** * log_close() * schliesst das logfile */ static void log_close() { fclose(log_fd); } /** * log_init() * initialisiert das logging * * @param logfile filename des logfiles * @return false bei fehler */ int log_init(char *logfile) { if ((log_fd = fopen(logfile, "a" )) == NULL) { log_print("log_open('%s'): %s", logfile); return 0; } /* beim beenden log schliessen */ if (atexit(log_close) != 0) { log_print("log_open(): atexit()"); return 0; } log_print("=========================="); return 1; }