X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Ffilelogger.cpp;h=07c5fda75c5f8ee763e49b972da08d1fcdc45b23;hb=e2b0f3dc9ef4d56c71d7abda13e6139ca092e387;hp=0e50f628e9877743cc639e81e8e8cc2e0bc5d89b;hpb=af7e1a1ca8b36064593becf62b1a91468ad32237;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/filelogger.cpp b/src/filelogger.cpp index 0e50f628e..07c5fda75 100644 --- a/src/filelogger.cpp +++ b/src/filelogger.cpp @@ -1,138 +1,59 @@ -/* +------------------------------------+ - * | Inspire Internet Relay Chat Daemon | - * +------------------------------------+ +/* + * InspIRCd -- Internet Relay Chat Daemon * - * InspIRCd: (C) 2002-2008 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 . */ -/* $Core: libIRCDfilelogger */ #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) -{ - 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() +FileLogStream::FileLogStream(LogLevel loglevel, FileWriter *fw) : LogStream(loglevel), f(fw) { - 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 &text) +void FileLogStream::OnLog(LogLevel loglevel, const std::string &type, const std::string &text) { - static char TIMESTR[26]; + static std::string TIMESTR; 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) { - time_t local = ServerInstance->Time(); - struct tm *timeinfo = localtime(&local); - - strlcpy(TIMESTR,asctime(timeinfo),26); - TIMESTR[24] = ':'; + TIMESTR = InspIRCd::TimeString(ServerInstance->Time()); 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()); - } + this->f->WriteLogLine(TIMESTR + " " + type + ": " + text + "\n"); }