Before you can start writing events to the log, you need to call Logger::getLogger to retrieve a pointer to a Logger object, using the name of the Logger through which you wish to route your logging events. Typically, the Logger pointer is acquired during initialization, by making the pointer a static member of the class being logged.
There only needs to be one statement of this kind for any class.
using namespace psl::log; class MyClass { protected: static LoggerPtr m_logger; public: void DoSomething(); }; LoggerPtr MyClass::m_logger = Logger::getLogger(_T("MyClass"));
Note the use of the _T()
macro for the string argument.
If you use this technique, your code will compile and work in Unicode as well as in ANSI builds.
The loggers are nodes in a hierarchy.
Within the hierarchy a logger named x.y
is considered to be a child of
logger x
,
and a logger x.y.z
is considered to be a child of
logger x.y
.
The root logger has no name, and is considered to be the parent of
logger x
, and all other loggers whose name does not include a period.
The root logger can be acquired by calling Logger::getRootLogger(),
and it is referred to in configuration files as log.rootLogger
.
Any setting applied to a parent node will apply to all its descendents, uinless they have their own settings. Consider the following configuration file settings:
log.rootLogger=ERROR, F log.X=TRACE log.X.Y.Z=INFO
The logging levels resulting from these settings are:
Logger | Level |
---|---|
Root | ERROR |
x | TRACE |
x.y | TRACE (inherited from x) |
x.y.z | INFO |
Note that if an intermediate parent node is not specified, it is assumed to exist.
Thus if there are two loggers x.y.z
and x
,
an intermediate logger x.y
will be created, as the parent of
logger x.y.z
and the child of logger x
.