The InspIRCd Project
Home | Developers | Wiki | Forums | Bug Tracker | SVN | Download
Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

FileWriter Class Reference

This class implements a nonblocking writer. More...

#include <logger.h>

Inheritance diagram for FileWriter:

Inheritance graph
[legend]
Collaboration diagram for FileWriter:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 FileWriter (InspIRCd *Instance, FILE *logfile)
 The constructor takes an already opened logfile.
virtual void HandleEvent (EventType et, int errornum=0)
 Handle pending write events.
void WriteLogLine (const std::string &line)
 Write one or more preformatted log lines.
virtual void Close ()
 Close the log file and cancel any events.
virtual ~FileWriter ()
 Close the log file and cancel any events.

Protected Attributes

InspIRCdServerInstance
 The creator/owner of this object.
FILE * log
 The log file (fd is inside this somewhere, we get it out with fileno()).
int writeops
 Number of write operations that have occured.

Detailed Description

This class implements a nonblocking writer.

Most people writing an ircd give little thought to their disk i/o. On a congested system, disk writes can block for long periods of time (e.g. if the system is busy and/or swapping a lot). If we just use a blocking fprintf() call, this could block for undesirable amounts of time (half of a second through to whole seconds). We DO NOT want this, so we make our logfile nonblocking and hook it into the SocketEngine. NB: If the operating system does not support nonblocking file I/O (linux seems to, as does freebsd) this will default to blocking behaviour.

Definition at line 29 of file logger.h.


Constructor & Destructor Documentation

FileWriter::FileWriter InspIRCd Instance,
FILE *  logfile
 

The constructor takes an already opened logfile.

Definition at line 333 of file logger.cpp.

FileWriter::~FileWriter  )  [virtual]
 

Close the log file and cancel any events.

(indirectly call Close()

Definition at line 363 of file logger.cpp.


Member Function Documentation

void FileWriter::Close  )  [virtual]
 

Close the log file and cancel any events.

Definition at line 354 of file logger.cpp.

References log.

void FileWriter::HandleEvent EventType  et,
int  errornum = 0
[virtual]
 

Handle pending write events.

This will flush any waiting data to disk. If any data remains after the fprintf call, another write event is scheduled to write the rest of the data when possible.

Implements EventHandler.

Definition at line 338 of file logger.cpp.

void FileWriter::WriteLogLine const std::string line  ) 
 

Write one or more preformatted log lines.

If the data cannot be written immediately, this class will insert itself into the SocketEngine, and register a write event, and when the write event occurs it will attempt again to write the data.

Definition at line 342 of file logger.cpp.

References log, and writeops.

Referenced by FileLogStream::OnLog().


Member Data Documentation

FILE* FileWriter::log [protected]
 

The log file (fd is inside this somewhere, we get it out with fileno()).

Definition at line 39 of file logger.h.

Referenced by Close(), and WriteLogLine().

InspIRCd* FileWriter::ServerInstance [protected]
 

The creator/owner of this object.

Definition at line 34 of file logger.h.

int FileWriter::writeops [protected]
 

Number of write operations that have occured.

Definition at line 43 of file logger.h.

Referenced by WriteLogLine().


The documentation for this class was generated from the following files: