X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Ffilelogger.cpp;h=07c5fda75c5f8ee763e49b972da08d1fcdc45b23;hb=e2b0f3dc9ef4d56c71d7abda13e6139ca092e387;hp=244b627174ddf8064fdcdff7a2859383bd358544;hpb=a33663c08681c2c0ecedda478e1ae9953237b1aa;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/filelogger.cpp b/src/filelogger.cpp index 244b62717..07c5fda75 100644 --- a/src/filelogger.cpp +++ b/src/filelogger.cpp @@ -1,107 +1,59 @@ -/* +------------------------------------+ - * | 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) 2013-2014 Sadie Powell + * Copyright (C) 2013 Attila Molnar + * Copyright (C) 2012 Robby + * Copyright (C) 2009 Uli Schlachter + * Copyright (C) 2009 Daniel De Graaf + * Copyright (C) 2008 Thomas Stagner + * Copyright (C) 2008 Robin Burchell + * Copyright (C) 2007, 2010 Craig Edwards + * 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 . */ + #include "inspircd.h" -#include #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(LogLevel loglevel, FileWriter *fw) : LogStream(loglevel), f(fw) { - if (log) - { - irc::sockets::NonBlocking(fileno(log)); - SetFd(fileno(log)); - buffer.clear(); - } + ServerInstance->Logs->AddLoggerRef(f); } -bool FileLogger::Readable() +FileLogStream::~FileLogStream() { - return false; -} - -void FileLogger::HandleEvent(EventType et, int errornum) -{ - 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(LogLevel loglevel, const std::string &type, const std::string &text) { - if (line.length()) - buffer.append(line); + static std::string TIMESTR; + 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) { - /* Burlex: Windows assumes nonblocking on FILE* pointers anyway, and also "file" fd's aren't the same - * as socket fd's. - */ -#ifndef WIN32 - int flags = fcntl(fileno(log), F_GETFL, 0); - fcntl(fileno(log), F_SETFL, flags ^ O_NONBLOCK); -#endif - if (buffer.size()) - fprintf(log,"%s",buffer.c_str()); - -#ifndef WINDOWS - ServerInstance->SE->DelFd(this); -#endif - - fflush(log); - fclose(log); + TIMESTR = InspIRCd::TimeString(ServerInstance->Time()); + LAST = ServerInstance->Time(); } - buffer.clear(); + this->f->WriteLogLine(TIMESTR + " " + type + ": " + text + "\n"); } - -FileLogger::~FileLogger() -{ - this->Close(); -} -