The C++ framework for developing highly scalable, high performance servers on Windows platforms.

CAsyncFileLog Class Reference
[Asynchronous I/OInterfacesFileIOLog files and the pluggable logging system]

Inheritance diagram for CAsyncFileLog:
Collaboration diagram for CAsyncFileLog:

List of all members.


Detailed Description

A class that implements JetByteTools::Core::ILogMessages to provide an asynchronous file log that uses overlapped I/O to perform writes to the log file. This class allows you to change the name of the log file after creation but this functionality should be externally synchronised with any use of the various LogMessage() calls and any calls on the IWaitable interface to ensure that SetLogName() is never called concurrently to one of the other calls. The reason that we require YOU to do this synchronisation work is that when used carefully (i.e. SetLogName() is never called when the class is being used by multiple threads) then there is no need to synchronise the calls to LogMessage().

Public Types

typedef unsigned long DataLength
typedef std::vector
< std::string > 
VectorOfLines
 Logs the messages to the log. Note that you should manually synchronise access to this function and the various SetLogName calls.
typedef std::deque
< std::string > 
DequeOfLines
 Logs the messages to the log. Note that you should manually synchronise access to this function and the various SetLogName calls.

Public Member Functions

 CAsyncFileLog (const JetByteTools::Core::_tstring &filename, ILimitPendingWrites &writeLimiter=CPendingWriteLimiter::NoLimitLimiter)
 Construct an async file log using the supplied filename for the log file. File I/O will be done using a default I/O thread pool with a single thread and buffers will be allocated from a default allocator with a buffer size of 100 bytes and a pool size of 10. If a maxPendingWrites limit is supplied then this is used to limit the maximum number of pending writes to prevent uncontrolled 'non paged pool' memory usage if log messages are produced at a rate faster than they can be written to the disk. Note that once the limit is reached all writes become synchronous until the number of pending writes has dropped below the limit again.
 CAsyncFileLog (const JetByteTools::Core::_tstring &filename, JetByteTools::IO::IIOPool &pool, JetByteTools::IO::IAllocateBuffers &allocator, ILimitPendingWrites &writeLimiter=CPendingWriteLimiter::NoLimitLimiter)
 Construct an async file log using the supplied filename for the log file. File I/O will be done using the threads in the IIOPool provided and data buffers obtained from the supplied buffer allocator. If a maxPendingWrites limit is supplied then this is used to limit the maximum number of pending writes to prevent uncontrolled 'non paged pool' memory usage if log messages are produced at a rate faster than they can be written to the disk. Note that once the limit is reached all writes become synchronous until the number of pending writes has dropped below the limit again.
 CAsyncFileLog (const JetByteTools::Core::_tstring &filename, JetByteTools::IO::IIOPool &pool, JetByteTools::IO::IAllocateBuffers &allocator, const JetByteTools::Core::IProvideLocalTime &timeProvider, ILimitPendingWrites &writeLimiter=CPendingWriteLimiter::NoLimitLimiter)
 Construct an async file log using the supplied filename for the log file. File I/O will be done using the threads in the IIOPool provided and data buffers obtained from the supplied buffer allocator. If a maxPendingWrites limit is supplied then this is used to limit the maximum number of pending writes to prevent uncontrolled 'non paged pool' memory usage if log messages are produced at a rate faster than they can be written to the disk. Note that once the limit is reached all writes become synchronous until the number of pending writes has dropped below the limit again.
 CAsyncFileLog (const CAsyncFileLog &rhs)
 Waits for any pending writes to complete and then destroys the log object.
 ~CAsyncFileLog () override
CAsyncFileLogoperator= (const CAsyncFileLog &rhs)
bool PerformWritesOnThisThread () const
 Returns true if writes are issued directly from the calling thread and false if they are marshalled to the thread pool.
void SetThreadIdentifier (const std::string &identifier) override
 Sets the identifier used in the log for the current thread to the supplied string. The thread identifier defaults to the thread id in the form "XXX: ", the string supplied as an identifier does not need to include the ": " as this will be appended automatically. It can be any string that will help you to identify the thread concerned.
void SetThreadIdentifier (const std::wstring &identifier) override
 Sets the identifier used in the log for the current thread to the supplied string. The thread identifier defaults to the thread id in the form "XXX: ", the string supplied as an identifier does not need to include the ": " as this will be appended automatically. It can be any string that will help you to identify the thread concerned.
void SetLogName (const std::string &filename) override
 Sets the name of the log file to the supplied name. Note that this creates a new log file with the specified name, it does NOT rename the existing log file. Note that you should manually synchronise access to this function and the various LogMessage and IWaitable calls.
void SetLogName (const std::wstring &filename) override
 Sets the name of the log file to the supplied name. Note that this creates a new log file with the specified name, it does NOT rename the existing log file. Note that you should manually synchronise access to this function and the various LogMessage and IWaitable calls.
void LogMessage (const VectorOfLines &messages) override
void LogMessage (const DequeOfLines &messages) override
void LogMessage (const std::string &message) override
 Logs the message to the log. Note that you should manually synchronise access to this function and the various SetLogName calls.
void LogMessage (const std::wstring &message) override
 Logs the message to the log. Note that you should manually synchronise access to this function and the various SetLogName calls.
void LogMessage (const char *pString) override
 Logs the message to the log. Note that you should manually synchronise access to this function and the various SetLogName calls.
void LogMessage (const wchar_t *pString) override
 Logs the message to the log. Note that you should manually synchronise access to this function and the various SetLogName calls.
void LogMessage (const char *pString, DataLength stringLength) override
void LogMessage (const wchar_t *pString, DataLength stringLength) override
HANDLE GetWaitHandle () const override
void Wait () const override
bool Wait (Milliseconds timeoutMillis) const override
virtual void LogMessage (const char *pString, DataLength stringLength)=0
 Logs the message to the log. Note that you should manually synchronise access to this function and the various SetLogName calls.
virtual void LogMessage (const wchar_t *pString, DataLength stringLength)=0
 Logs the message to the log. Note that you should manually synchronise access to this function and the various SetLogName calls.

Member Typedef Documentation

typedef unsigned long DataLength [inherited]

typedef std::vector<std::string> VectorOfLines [inherited]

Logs the messages to the log. Note that you should manually synchronise access to this function and the various SetLogName calls.

typedef std::deque<std::string> DequeOfLines [inherited]

Logs the messages to the log. Note that you should manually synchronise access to this function and the various SetLogName calls.


Constructor & Destructor Documentation

Construct an async file log using the supplied filename for the log file. File I/O will be done using a default I/O thread pool with a single thread and buffers will be allocated from a default allocator with a buffer size of 100 bytes and a pool size of 10. If a maxPendingWrites limit is supplied then this is used to limit the maximum number of pending writes to prevent uncontrolled 'non paged pool' memory usage if log messages are produced at a rate faster than they can be written to the disk. Note that once the limit is reached all writes become synchronous until the number of pending writes has dropped below the limit again.

Reimplemented in CAsyncFileLog.

Construct an async file log using the supplied filename for the log file. File I/O will be done using the threads in the IIOPool provided and data buffers obtained from the supplied buffer allocator. If a maxPendingWrites limit is supplied then this is used to limit the maximum number of pending writes to prevent uncontrolled 'non paged pool' memory usage if log messages are produced at a rate faster than they can be written to the disk. Note that once the limit is reached all writes become synchronous until the number of pending writes has dropped below the limit again.

Reimplemented in CAsyncFileLog.

Construct an async file log using the supplied filename for the log file. File I/O will be done using the threads in the IIOPool provided and data buffers obtained from the supplied buffer allocator. If a maxPendingWrites limit is supplied then this is used to limit the maximum number of pending writes to prevent uncontrolled 'non paged pool' memory usage if log messages are produced at a rate faster than they can be written to the disk. Note that once the limit is reached all writes become synchronous until the number of pending writes has dropped below the limit again.

Reimplemented in CAsyncFileLog.

CAsyncFileLog ( const CAsyncFileLog rhs  ) 

Waits for any pending writes to complete and then destroys the log object.

~CAsyncFileLog (  )  [override]


Member Function Documentation

CAsyncFileLog& operator= ( const CAsyncFileLog rhs  ) 

bool PerformWritesOnThisThread (  )  const

Returns true if writes are issued directly from the calling thread and false if they are marshalled to the thread pool.

void SetThreadIdentifier ( const std::string &  identifier  )  [override, virtual]

Sets the identifier used in the log for the current thread to the supplied string. The thread identifier defaults to the thread id in the form "XXX: ", the string supplied as an identifier does not need to include the ": " as this will be appended automatically. It can be any string that will help you to identify the thread concerned.

Implements ILogMessages.

void SetThreadIdentifier ( const std::wstring &  identifier  )  [override, virtual]

Sets the identifier used in the log for the current thread to the supplied string. The thread identifier defaults to the thread id in the form "XXX: ", the string supplied as an identifier does not need to include the ": " as this will be appended automatically. It can be any string that will help you to identify the thread concerned.

Implements ILogMessages.

void SetLogName ( const std::string &  name  )  [override, virtual]

Sets the name of the log file to the supplied name. Note that this creates a new log file with the specified name, it does NOT rename the existing log file. Note that you should manually synchronise access to this function and the various LogMessage and IWaitable calls.

Implements ILogMessages.

void SetLogName ( const std::wstring &  name  )  [override, virtual]

Sets the name of the log file to the supplied name. Note that this creates a new log file with the specified name, it does NOT rename the existing log file. Note that you should manually synchronise access to this function and the various LogMessage and IWaitable calls.

Implements ILogMessages.

void LogMessage ( const VectorOfLines messages  )  [override, virtual]

Implements ILogMessages.

void LogMessage ( const DequeOfLines messages  )  [override, virtual]

Implements ILogMessages.

void LogMessage ( const std::string &  message  )  [override, virtual]

Logs the message to the log. Note that you should manually synchronise access to this function and the various SetLogName calls.

Implements ILogMessages.

void LogMessage ( const std::wstring &  message  )  [override, virtual]

Logs the message to the log. Note that you should manually synchronise access to this function and the various SetLogName calls.

Implements ILogMessages.

void LogMessage ( const char *  pString  )  [override, virtual]

Logs the message to the log. Note that you should manually synchronise access to this function and the various SetLogName calls.

Implements ILogMessages.

void LogMessage ( const wchar_t *  pString  )  [override, virtual]

Logs the message to the log. Note that you should manually synchronise access to this function and the various SetLogName calls.

Implements ILogMessages.

void LogMessage ( const char *  pString,
DataLength  stringLength 
) [override]

void LogMessage ( const wchar_t *  pString,
DataLength  stringLength 
) [override]

HANDLE GetWaitHandle (  )  const [override]

void Wait (  )  const [override]

bool Wait ( Milliseconds  timeoutMillis  )  const [override]

virtual void LogMessage ( const char *  pString,
DataLength  stringLength 
) [pure virtual, inherited]

Logs the message to the log. Note that you should manually synchronise access to this function and the various SetLogName calls.

virtual void LogMessage ( const wchar_t *  pString,
DataLength  stringLength 
) [pure virtual, inherited]

Logs the message to the log. Note that you should manually synchronise access to this function and the various SetLogName calls.


Generated on Sun Sep 12 19:09:18 2021 for The Server Framework - v7.4 by doxygen 1.5.3