Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

log4cpp::NDC Class Reference

The NDC class implements nested diagnostic contexts as defined by Neil Harrison in the article "Patterns for Logging Diagnostic Messages" part of the book "Pattern Languages of Program Design 3" edited by Martin et al. More...

#include <NDC.hh>

List of all members.

Public Types

typedef std::vector< DiagnosticContextContextStack

Public Methods

 NDC ()
virtual ~NDC ()
virtual void _clear ()
virtual ContextStack_cloneStack ()
virtual const std::string & _get () const
virtual int _getDepth () const
virtual void _inherit (ContextStack *stack)
virtual std::string _pop ()
virtual void _push (const std::string &message)
virtual void _setMaxDepth (int maxDepth)

Static Public Methods

void clear ()
 Clear any nested disgnostic information if any. More...

ContextStackcloneStack ()
 Clone the diagnostic context for the current thread. More...

const std::string & get ()
 Get the current diagnostic context string. More...

int getDepth ()
 Get the current nesting depth of this diagnostic context. More...

void inherit (ContextStack *stack)
std::string pop ()
 Clients should call this method before leaving a diagnostic context. More...

void push (const std::string &message)
 Push new diagnostic context information for the current thread. More...

void setMaxDepth (int maxDepth)
 Set the maximum nesting depth for the current NDC. More...

NDC & getNDC ()
 Return the NDC for the current thread. More...


Public Attributes

ContextStack _stack


Detailed Description

The NDC class implements nested diagnostic contexts as defined by Neil Harrison in the article "Patterns for Logging Diagnostic Messages" part of the book "Pattern Languages of Program Design 3" edited by Martin et al.

A Nested Diagnostic Context, or NDC in short, is an instrument to distinguish interleaved log output from different sources. Log output is typically interleaved when a server handles multiple clients near-simulatanously.

Interleaved log output can still be meaningful if each log entry from different contexts had a distinctive stamp. This is where NDCs come into play.

Note that NDCs are managed on a per thread basis. NDC operations such as push, pop, clear, getDepth and setMaxDepth affect the NDC of the current thread only. NDCs of other threads remain unaffected.

To build an NDC one uses the push operation. Simply put,

There is no penalty for forgetting to match each push operation with a corresponding pop, except the obvious mismatch between the real application context and the context set in the NDC.

Custom Layouts may include the nested diagnostic context for the current thread in log messages, without any user intervention. Hence, even if a server is serving multiple clients simultaneously, the logs emanating from the same code (belonging to the same category) can still be distinguished because each client request will have a different NDC tag.

Unfortunately, unlike Java, C++ does not have platform independent multithreading support. Therefore, currently log4cpp is not multithread aware, it implicitly assumes only one thread exists, the main process thread.


Member Typedef Documentation

typedef std::vector<DiagnosticContext> log4cpp::NDC::ContextStack
 


Constructor & Destructor Documentation

log4cpp::NDC::NDC  
 

log4cpp::NDC::~NDC   [virtual]
 


Member Function Documentation

void log4cpp::NDC::_clear   [virtual]
 

NDC::ContextStack * log4cpp::NDC::_cloneStack   [virtual]
 

const std::string & log4cpp::NDC::_get   const [virtual]
 

int log4cpp::NDC::_getDepth   const [virtual]
 

void log4cpp::NDC::_inherit ContextStack   stack [virtual]
 

std::string log4cpp::NDC::_pop   [virtual]
 

void log4cpp::NDC::_push const std::string &    message [virtual]
 

void log4cpp::NDC::_setMaxDepth int    maxDepth [virtual]
 

void log4cpp::NDC::clear   [static]
 

Clear any nested disgnostic information if any.

This method is useful in cases where the same thread can be potentially used over and over in different unrelated contexts.

This method is equivalent to calling the setMaxDepth method with a zero maxDepth argument.

NDC::ContextStack * log4cpp::NDC::cloneStack   [static]
 

Clone the diagnostic context for the current thread.

Internally a diagnostic context is represented as a stack. A given thread can supply the stack (i.e. diagnostic context) to a child thread so that the child can inherit the parent thread's diagnostic context.

The child thread uses the inherit method to inherit the parent's diagnostic context.

Returns:
Stack A clone of the current thread's diagnostic context.

const std::string & log4cpp::NDC::get   [static]
 

Get the current diagnostic context string.

Returns:
the context string.

int log4cpp::NDC::getDepth   [static]
 

Get the current nesting depth of this diagnostic context.

Returns:
the nesting depth

NDC & log4cpp::NDC::getNDC   [static]
 

Return the NDC for the current thread.

Returns:
the NDC for the current thread

void log4cpp::NDC::inherit ContextStack   stack [static]
 

std::string log4cpp::NDC::pop   [static]
 

Clients should call this method before leaving a diagnostic context.

The returned value is the value that was pushed last. If no context is available, then the empty string "" is returned.

Returns:
String The innermost diagnostic context.

void log4cpp::NDC::push const std::string &    message [static]
 

Push new diagnostic context information for the current thread.

The contents of the message parameter is determined solely by the client.

Parameters:
message  The new diagnostic context information.

void log4cpp::NDC::setMaxDepth int    maxDepth [static]
 

Set the maximum nesting depth for the current NDC.

Curently NDCs do not enforce a maximum depth and consequentially this method has no effect.

Parameters:
maxDepth  the maximum nesting depth


Member Data Documentation

ContextStack log4cpp::NDC::_stack
 


The documentation for this class was generated from the following files:
Generated on Mon Oct 28 23:42:13 2002 for log4cpp by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002