X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Ffilelogger.cpp;h=0575256d08c8261c8b7b905dc283e2cd9c0c6cf5;hb=0a0aa94537dd1be4a4acc2e992dee8d455328240;hp=32a1f882f00fdef76d95ec8339522862f1f68fd5;hpb=4bbca0643b56f26f73a05462d226b2dd8871626b;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/filelogger.cpp b/src/filelogger.cpp index 32a1f882f..0575256d0 100644 --- a/src/filelogger.cpp +++ b/src/filelogger.cpp @@ -1,101 +1,63 @@ -/* +------------------------------------+ - * | Inspire Internet Relay Chat Daemon | - * +------------------------------------+ +/* + * InspIRCd -- Internet Relay Chat Daemon * - * InspIRCd: (C) 2002-2007 InspIRCd Development Team - * See: http://www.inspircd.org/wiki/index.php/Credits + * Copyright (C) 2008 Thomas Stagner + * Copyright (C) 2008 Robin Burchell + * Copyright (C) 2007 Dennis Friis * - * This program is free but copyrighted software; see - * the file COPYING for details. + * This file is part of InspIRCd. InspIRCd 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, version 2. * - * --------------------------------------------------- + * 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, see . */ + +/* $Core */ + #include "inspircd.h" #include #include "socketengine.h" -#include "inspircd_se_config.h" #include "filelogger.h" -FileLogger::FileLogger(InspIRCd* Instance, FILE* logfile) -: ServerInstance(Instance), log(logfile), writeops(0) +FileLogStream::FileLogStream(int loglevel, FileWriter *fw) + : LogStream(loglevel), f(fw) { - if (log) - { - Instance->SE->NonBlocking(fileno(log)); - SetFd(fileno(log)); - buffer.clear(); - } + ServerInstance->Logs->AddLoggerRef(f); } -bool FileLogger::Readable() -{ - return false; -} - -void FileLogger::HandleEvent(EventType et, int errornum) +FileLogStream::~FileLogStream() { - WriteLogLine(""); - if (log) - ServerInstance->SE->DelFd(this); + /* FileWriter is managed externally now */ + ServerInstance->Logs->DelLoggerRef(f); } -void FileLogger::WriteLogLine(const std::string &line) +void FileLogStream::OnLog(int loglevel, const std::string &type, const std::string &text) { - if (line.length()) - buffer.append(line); + static char TIMESTR[26]; + static time_t LAST = 0; - if (log) + if (loglevel < this->loglvl) { - int written = fprintf(log,"%s",buffer.c_str()); -#ifdef WINDOWS - buffer.clear(); -#else - if ((written >= 0) && (written < (int)buffer.length())) - { - buffer.erase(0, buffer.length()); - ServerInstance->SE->AddFd(this); - } - else if (written == -1) - { - if (errno == EAGAIN) - ServerInstance->SE->AddFd(this); - } - else - { - /* Wrote the whole buffer, and no need for write callback */ - buffer.clear(); - } -#endif - if (writeops++ % 20) - { - fflush(log); - } + return; } -} -void FileLogger::Close() -{ - if (log) + if (ServerInstance->Time() != LAST) { - ServerInstance->SE->Blocking(fileno(log)); - - if (buffer.size()) - fprintf(log,"%s",buffer.c_str()); + time_t local = ServerInstance->Time(); + struct tm *timeinfo = localtime(&local); -#ifndef WINDOWS - ServerInstance->SE->DelFd(this); -#endif - - fflush(log); - fclose(log); + strlcpy(TIMESTR,asctime(timeinfo),26); + TIMESTR[24] = ':'; + LAST = ServerInstance->Time(); } - buffer.clear(); + std::string out = std::string(TIMESTR) + " " + text.c_str() + "\n"; + this->f->WriteLogLine(out); } - -FileLogger::~FileLogger() -{ - this->Close(); -} -