X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Ffilelogger.cpp;h=8ed66eca29cd0eeeb923b26e65216bfcb4bb9259;hb=e11ae4f39cbcd169e725b680015d73c127f4a70e;hp=d63d58915bacfe41a9f41f954d583aa459926695;hpb=1df212127427f88b502a5f1030fd2e0a31bd499e;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/filelogger.cpp b/src/filelogger.cpp index d63d58915..8ed66eca2 100644 --- a/src/filelogger.cpp +++ b/src/filelogger.cpp @@ -2,8 +2,8 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2008 InspIRCd Development Team - * See: http://www.inspircd.org/wiki/index.php/Credits + * InspIRCd: (C) 2002-2010 InspIRCd Development Team + * See: http://wiki.inspircd.org/Credits * * This program is free but copyrighted software; see * the file COPYING for details. @@ -11,109 +11,34 @@ * --------------------------------------------------- */ -/* $Core: libIRCDfilelogger */ +/* $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(); - } -} - -bool FileLogger::Readable() -{ - return false; -} - -void FileLogger::HandleEvent(EventType, int) -{ - WriteLogLine(""); - if (log) - ServerInstance->SE->DelFd(this); -} - -void FileLogger::WriteLogLine(const std::string &line) -{ - if (line.length()) - buffer.append(line); - - if (log) - { - 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); - } - } -} - -void FileLogger::Close() -{ - if (log) - { - ServerInstance->SE->Blocking(fileno(log)); - - if (buffer.size()) - fprintf(log,"%s",buffer.c_str()); - -#ifndef WINDOWS - ServerInstance->SE->DelFd(this); -#endif - - fflush(log); - fclose(log); - } - - buffer.clear(); + ServerInstance->Logs->AddLoggerRef(f); } -FileLogger::~FileLogger() +FileLogStream::~FileLogStream() { - this->Close(); + /* FileWriter is managed externally now */ + ServerInstance->Logs->DelLoggerRef(f); } - void FileLogStream::OnLog(int loglevel, const std::string &type, const std::string &text) { static char TIMESTR[26]; static time_t LAST = 0; - /* sanity check, just in case */ - if (!ServerInstance->Config) - return; - - /* If we were given -debug we output all messages, regardless of configured loglevel */ - if ((loglevel < ServerInstance->Config->LogLevel) && !ServerInstance->Config->forcedebug) + if (loglevel < this->loglvl) + { return; + } if (ServerInstance->Time() != LAST) { @@ -125,14 +50,6 @@ void FileLogStream::OnLog(int loglevel, const std::string &type, const std::stri LAST = ServerInstance->Time(); } - if (ServerInstance->Config->log_file && ServerInstance->Config->writelog) - { - std::string out = std::string(TIMESTR) + " " + text.c_str() + "\n"; - this->f->WriteLogLine(out); - } - - if (ServerInstance->Config->nofork) - { - printf("%s %s\n", TIMESTR, text.c_str()); - } + std::string out = std::string(TIMESTR) + " " + text.c_str() + "\n"; + this->f->WriteLogLine(out); }