diff options
author | aquanight <aquanight@e03df62e-2008-0410-955e-edbf42e46eb7> | 2008-02-10 20:07:30 +0000 |
---|---|---|
committer | aquanight <aquanight@e03df62e-2008-0410-955e-edbf42e46eb7> | 2008-02-10 20:07:30 +0000 |
commit | 4965a1d6697565b1a72de31deaccfd93180bd403 (patch) | |
tree | dee80d010761a347665556b37b20d882556decec /src/filelogger.cpp | |
parent | ef9ab2301d8ee84dc9b68bcede435bc540d7243c (diff) |
Code for loading <log method=file> tags from config, but this still needs to be fit into the config reader stuff
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@8885 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/filelogger.cpp')
-rw-r--r-- | src/filelogger.cpp | 83 |
1 files changed, 6 insertions, 77 deletions
diff --git a/src/filelogger.cpp b/src/filelogger.cpp index 5c2757520..b0eb77310 100644 --- a/src/filelogger.cpp +++ b/src/filelogger.cpp @@ -19,89 +19,18 @@ #include "inspircd_se_config.h" #include "filelogger.h" -FileLogger::FileLogger(InspIRCd* Instance, FILE* logfile) -: ServerInstance(Instance), log(logfile), writeops(0) +FileLogStream::FileLogStream(InspIRCd *Instance, int loglevel, FileWriter *fw) + : LogStream(Instance, 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); + ServerInstance->Logs->AddLoggerRef(f); } -void FileLogger::WriteLogLine(const std::string &line) +FileLogStream::~FileLogStream() { - 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); - } - } + /* FileWriter is managed externally now */ + ServerInstance->Logs->DelLoggerRef(f); } -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(); -} - -FileLogger::~FileLogger() -{ - this->Close(); -} - - void FileLogStream::OnLog(int loglevel, const std::string &type, const std::string &text) { static char TIMESTR[26]; |