Classes | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Private Attributes | List of all members
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 "<i>Pattern Languages of Program Design 3</i>" edited by Martin et al. More...

#include <NDC.hh>

Classes

struct  DiagnosticContext
 

Public Types

typedef std::vector< DiagnosticContextContextStack
 

Public Member Functions

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

Static Public Member Functions

static void clear ()
 Clear any nested disgnostic information if any. More...
 
static ContextStackcloneStack ()
 Clone the diagnostic context for the current thread. More...
 
static const std::string & get ()
 Get the current diagnostic context string. More...
 
static size_t getDepth ()
 Get the current nesting depth of this diagnostic context. More...
 
static NDCgetNDC ()
 Return the NDC for the current thread. More...
 
static void inherit (ContextStack *stack)
 
static std::string pop ()
 Clients should call this method before leaving a diagnostic context. More...
 
static void push (const std::string &message)
 Push new diagnostic context information for the current thread. More...
 
static void setMaxDepth (int maxDepth)
 Set the maximum nesting depth for the current NDC. More...
 
static void shutdown ()
 cleans up More...
 

Public Attributes

ContextStack _stack
 

Static Private Attributes

static const std::string emptyString
 
static bool isUsedNDC
 

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 "<i>Pattern Languages of Program Design 3</i>" 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.

Definition at line 69 of file NDC.hh.

Member Typedef Documentation

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

Definition at line 87 of file NDC.hh.

Constructor & Destructor Documentation

NDC::NDC ( )
virtual NDC::~NDC ( )
virtual

Member Function Documentation

virtual void NDC::_clear ( )
virtual
virtual ContextStack* NDC::_cloneStack ( )
virtual
virtual const std::string& NDC::_get ( ) const
virtual
virtual size_t NDC::_getDepth ( ) const
virtual
virtual void NDC::_inherit ( ContextStack stack)
virtual
virtual std::string NDC::_pop ( )
virtual
virtual void NDC::_push ( const std::string &  message)
virtual
virtual void NDC::_setMaxDepth ( int  maxDepth)
virtual
static void 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.

static ContextStack* 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.
static const std::string& NDC::get ( )
static

Get the current diagnostic context string.

Returns
the context string.
static size_t NDC::getDepth ( )
static

Get the current nesting depth of this diagnostic context.

Returns
the nesting depth
static NDC& NDC::getNDC ( )
static

Return the NDC for the current thread.

Returns
the NDC for the current thread
static void NDC::inherit ( ContextStack stack)
static
static std::string 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.
static void 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
messageThe new diagnostic context information.
static void 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
maxDepththe maximum nesting depth
static void NDC::shutdown ( )
static

cleans up

Member Data Documentation

ContextStack NDC::_stack

Definition at line 177 of file NDC.hh.

const std::string NDC::emptyString
staticprivate

Definition at line 71 of file NDC.hh.

bool NDC::isUsedNDC
staticprivate

Definition at line 70 of file NDC.hh.


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


rc_genicam_api
Author(s): Heiko Hirschmueller
autogenerated on Wed Mar 17 2021 02:48:41