From 326191cd160e141958a2b3d536d37dabf7922568 Mon Sep 17 00:00:00 2001 From: peavey Date: Wed, 25 Jul 2007 11:53:07 +0000 Subject: Put FileLogger in it's own class. Useful when logging doing more focused logging git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@7561 e03df62e-2008-0410-955e-edbf42e46eb7 --- .Makefile.inc | 1 + configure | 20 +++++++++---- include/inspircd.h | 73 +-------------------------------------------- src/inspircd.cpp | 86 ------------------------------------------------------ 4 files changed, 16 insertions(+), 164 deletions(-) diff --git a/.Makefile.inc b/.Makefile.inc index e008397b0..ad46ba780 100644 --- a/.Makefile.inc +++ b/.Makefile.inc @@ -95,6 +95,7 @@ install: all@EXTRA_DIR@ -install -m $(INSTMODE) src/libIRCDtimer.$(LIB_EXT) $(LIBPATH) -install -m $(INSTMODE) src/libIRCDsnomasks.$(LIB_EXT) $(LIBPATH) -install -m $(INSTMODE) src/libIRCDserver.$(LIB_EXT) $(LIBPATH) + -install -m $(INSTMODE) src/libIRCDfilelogger.$(LIB_EXT) $(LIBPATH) -install -m $(INSTMODE) src/inspircd $(BINPATH) -install -m $(INSTMODE) @STARTSCRIPT@ $(@DESTINATION@) 2>/dev/null -install -m $(INSTMODE) src/cmd_admin.so $(LIBPATH) diff --git a/configure b/configure index f29f44b7a..ed80e9c41 100755 --- a/configure +++ b/configure @@ -1324,11 +1324,11 @@ EOM if ($config{IS_DARWIN} eq "YES") { print FH < > FailedPortList; diff --git a/src/inspircd.cpp b/src/inspircd.cpp index 44f658427..d039d7314 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -811,89 +811,3 @@ int InspIRCd::GetTimeDelta() { return time_delta; } - -bool FileLogger::Readable() -{ - return false; -} - -void FileLogger::HandleEvent(EventType et, int errornum) -{ - this->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) - { - /* 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); - } - - buffer.clear(); -} - -FileLogger::FileLogger(InspIRCd* Instance, FILE* logfile) : ServerInstance(Instance), log(logfile), writeops(0) -{ - if (log) - { - irc::sockets::NonBlocking(fileno(log)); - this->SetFd(fileno(log)); - buffer.clear(); - } -} - -FileLogger::~FileLogger() -{ - this->Close(); -} - -- cgit v1.2.3