/* * $Id$ * * Evoke, head honcho of everything * Part of Equinox Desktop Environment (EDE). * Copyright (c) 2000-2007 EDE Authors. * * This program is licensed under terms of the * GNU General Public License version 2 or newer. * See COPYING for details. */ #include "Log.h" #include #include #include #include RealLog::RealLog() : f(NULL), buff(NULL), tbuff(NULL), bufflen(256), tbufflen(20), to_stdout(false), to_stderr(false) { } RealLog::~RealLog() { if(f) { puts("RealLog::~RealLog()\n"); fclose(f); } if(buff) delete [] buff; if(tbuff) delete [] tbuff; } bool RealLog::open(const char* file) { EASSERT(file != NULL); if(strcmp(file, "stdout") == 0) to_stdout = true; else if(strcmp(file, "stderr") == 0) to_stderr = true; else { f = fopen(file, "a"); if(!f) return false; } buff = new char[bufflen]; tbuff = new char[tbufflen]; return true; } void RealLog::printf(const char* fmt, ...) { EASSERT(buff != NULL); EASSERT(tbuff != NULL); va_list ap; va_start(ap, fmt); vsnprintf(buff, bufflen, fmt, ap); va_end(ap); time_t t = time(NULL); strftime(tbuff, tbufflen, "%F %T", localtime(&t)); if(to_stdout) fprintf(stdout, "[%s] %s", tbuff, buff); else if(to_stderr) fprintf(stderr, "[%s] %s", tbuff, buff); else { fprintf(f, "[%s] %s", tbuff, buff); fflush(f); } }