This class implements a Nested Diagnostic Context (NDC), as described in Neil Harrison's article "Patterns for Logging Diagnostic Messages" in "Pattern Languages of Program Design 3" (Addison-Wesley).
A NDC maintains a stack of context information, consisting of an informational string (e.g., a method name), as well as an optional source code line number and file name. NDCs are especially useful for tagging log messages with context information which is very helpful in a multithreaded server scenario. Every thread has its own private NDC, which is automatically created when needed and destroyed when the thread terminates.
The NDCScope (or NDC::Scope) class can be used to automatically push information at the beginning of a scope, and to pop it at the end. The poco_ndc(info) macro augments the information with a source code line number and file name.
Creates the NestedDiagnosticContext.
Destroys the NestedDiagnosticContext.
Clears the NDC stack.
static NestedDiagnosticContext & current();
Returns the current thread's NDC.
int depth() const;
Returns the depth (number of contexts) of the stack.
std::ostream & ostr
Dumps the stack (including line number and filenames) to the given stream. The entries are delimited by a newline.
std::ostream & ostr,
const std::string & delimiter
Dumps the stack (including line number and filenames) to the given stream.
Pops the top-most context off the stack.
const std::string & info
Pushes a context (without line number and filename) onto the stack.
const std::string & info,
const char * filename
Pushes a context (including line number and filename) onto the stack. Filename must be a static string, such as the one produced by the __FILE__ preprocessor macro.
std::string toString() const;
Returns the stack as a string with entries delimited by colons. The string does not contain line numbers and filenames.