]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/logger.cpp
Add SerializeFormat for easier metadata formatting
[user/henk/code/inspircd.git] / src / logger.cpp
index 20235a826030ebc315d85a5e03de565e9003b470..049b4b5e7aa0883ca48fa77af7f4f3afdba443b1 100644 (file)
@@ -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-2009 InspIRCd Development Team
+ * See: http://wiki.inspircd.org/Credits
  *
  * This program is free but copyrighted software; see
  *            the file COPYING for details.
@@ -11,7 +11,7 @@
  * ---------------------------------------------------
  */
 
-/* $Core: libIRCDlogger */
+/* $Core */
 
 #include "inspircd.h"
 
@@ -31,7 +31,7 @@
  *
  * How it works:
  *  Modules create their own logstream types (core will create one for 'file logging' for example) and create instances of these logstream types
- *  and register interest in a certain logtype. Globbing is not here, with the exception of * - for all events.. loglevel is used to drop 
+ *  and register interest in a certain logtype. Globbing is not here, with the exception of * - for all events.. loglevel is used to drop
  *  events that are of no interest to a logstream.
  *
  *  When Log is called, the vector of logstreams for that type is iterated (along with the special vector for "*"), and all registered logstreams
@@ -41,7 +41,7 @@
  * NOTE: Somehow we have to let LogManager manage the non-blocking file streams and provide an interface to share them with various LogStreams,
  *       as, for example, a user may want to let 'KILL' and 'XLINE' snotices go to /home/ircd/inspircd/logs/operactions.log, or whatever. How
  *       can we accomplish this easily? I guess with a map of pre-loved logpaths, and a pointer of FILE *..
- * 
+ *
  */
 
 void LogManager::SetupNoFork()
@@ -49,11 +49,11 @@ void LogManager::SetupNoFork()
        if (!noforkstream)
        {
                FileWriter* fw = new FileWriter(ServerInstance, stdout);
-               noforkstream = new FileLogStream(ServerInstance, ServerInstance->Config->forcedebug ? DEBUG : ServerInstance->Config->LogLevel, fw);
+               noforkstream = new FileLogStream(ServerInstance, ServerInstance->Config->forcedebug ? DEBUG : DEFAULT, fw);
        }
        else
        {
-               noforkstream->ChangeLevel(ServerInstance->Config->forcedebug ? DEBUG : ServerInstance->Config->LogLevel);
+               noforkstream->ChangeLevel(ServerInstance->Config->forcedebug ? DEBUG : DEFAULT);
        }
        AddLogType("*", noforkstream, false);
 }
@@ -333,61 +333,23 @@ void LogManager::Log(const std::string &type, int loglevel, const std::string &m
 FileWriter::FileWriter(InspIRCd* Instance, FILE* logfile)
 : ServerInstance(Instance), log(logfile), writeops(0)
 {
-       if (log)
-       {
-               Instance->SE->NonBlocking(fileno(log));
-               SetFd(fileno(log));
-               buffer.clear();
-       }
 }
 
-bool FileWriter::Readable()
+void FileWriter::HandleEvent(EventType ev, int)
 {
-       return false;
-}
-
-void FileWriter::HandleEvent(EventType, int)
-{
-       WriteLogLine("");
-       if (log)
-       {
-               ServerInstance->SE->DelFd(this);
-       }
 }
 
 void FileWriter::WriteLogLine(const std::string &line)
 {
-       if (line.length())
-       {
-               buffer.append(line);
-       }
+       if (log == NULL)
+               return;
+// XXX: For now, just return. Don't throw an exception. It'd be nice to find out if this is happening, but I'm terrified of breaking so close to final release. -- w00t
+//             throw CoreException("FileWriter::WriteLogLine called with a closed logfile");
 
-       if (log)
+       fprintf(log,"%s",line.c_str());
+       if (writeops++ % 20)
        {
-               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);
-               }
+               fflush(log);
        }
 }
 
@@ -395,22 +357,10 @@ void FileWriter::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);
+               log = NULL;
        }
-
-       buffer.clear();
 }
 
 FileWriter::~FileWriter()