30 #ifndef Pt_System_Logger_h
31 #define Pt_System_Logger_h
33 #include <Pt/System/Api.h>
34 #include <Pt/System/LogLevel.h>
35 #include <Pt/System/LogTarget.h>
36 #include <Pt/System/LogRecord.h>
37 #include <Pt/NonCopyable.h>
97 friend class LogManager;
106 Logger(
const std::string& name);
128 static void init(
const std::string& file);
131 static void initTargets()
132 { init(
"log.properties"); }
144 static void init(
const Settings& settings);
173 static void setPattern(
const std::string& pattern);
193 static void setChannel(
const std::string& target,
const std::string& url)
200 return level <= _target->logLevel();
207 return record.
logLevel() <= _target->logLevel();
218 if( always || this->enabled( record.
logLevel() ) )
220 _target->log( record );
235 LogTarget& initLogger(
const std::string& name);
310 _logger->
log( _record, _enabled );
319 operator bool()
const
327 template <
typename T>
382 struct LoggerStaticInit
384 template <
typename F>
385 LoggerStaticInit(F initfunc)
394 #define PT_LOGGER_BEGIN_IMPL(logger, level) \
395 if( ! logger.enabled( Pt::System::level ) ) \
397 else Pt::System::LogMessage(static_cast<Pt::System::Logger&>(logger), Pt::System::level, true)
400 #define PT_LOG_INIT(file)
401 #define PT_LOG_DEFINE_IMPL(instance, category)
402 #define PT_LOG_TO_IMPL(instance, level, message)
403 #define PT_LOGGER_LOG_IMPL(logger, level, expr)
405 #define PT_LOG_INIT(settings) Pt::System::Logger::init(settings);
409 #define PT_LOG_DEFINE_IMPL(instance, category) \
410 inline static Pt::System::Logger& instance() \
412 static Pt::System::Logger instance##_instance(category); \
413 return instance##_instance; \
415 static const Pt::System::LoggerStaticInit instance##_static_init( &instance );
418 #define PT_LOG_TO_IMPL(instance, level, expr) PT_LOGGER_LOG_IMPL(instance(), level, expr)
421 #define PT_LOGGER_LOG_IMPL(logger, level, expr) PT_LOGGER_BEGIN_IMPL(logger, level) << expr << Pt::System::endlog
424 #define PT_LOG_DEFINE(category) PT_LOG_DEFINE_IMPL(static_logger, category)
425 #define PT_LOG_FATAL(expr) PT_LOG_TO_IMPL(static_logger, Fatal, expr)
426 #define PT_LOG_ERROR(expr) PT_LOG_TO_IMPL(static_logger, Error, expr)
427 #define PT_LOG_WARN(expr) PT_LOG_TO_IMPL(static_logger, Warn, expr)
428 #define PT_LOG_INFO(expr) PT_LOG_TO_IMPL(static_logger, Info, expr)
429 #define PT_LOG_DEBUG(expr) PT_LOG_TO_IMPL(static_logger, Debug, expr)
430 #define PT_LOG_TRACE(expr) PT_LOG_TO_IMPL(static_logger, Trace, expr)
432 #define PT_LOG_DEFINE_INSTANCE(instance, category) PT_LOG_DEFINE_IMPL(instance, category)
433 #define PT_LOG_FATAL_TO(instance, expr) PT_LOG_TO_IMPL(instance, Fatal, expr)
434 #define PT_LOG_ERROR_TO(instance, expr) PT_LOG_TO_IMPL(instance, Error, expr)
435 #define PT_LOG_WARN_TO(instance, expr) PT_LOG_TO_IMPL(instance, Warn, expr)
436 #define PT_LOG_INFO_TO(instance, expr) PT_LOG_TO_IMPL(instance, Info, expr)
437 #define PT_LOG_DEBUG_TO(instance, expr) PT_LOG_TO_IMPL(instance, Debug, expr)
438 #define PT_LOG_TRACE_TO(instance, expr) PT_LOG_TO_IMPL(instance, Trace, expr)
440 #define PT_LOGGER_LOG_FATAL(logger, expr) PT_LOGGER_LOG_IMPL(logger, Fatal, expr)
441 #define PT_LOGGER_LOG_ERROR(logger, expr) PT_LOGGER_LOG_IMPL(logger, Error, expr)
442 #define PT_LOGGER_LOG_WARN(logger, expr) PT_LOGGER_LOG_IMPL(logger, Warn, expr)
443 #define PT_LOGGER_LOG_INFO(logger, expr) PT_LOGGER_LOG_IMPL(logger, Info, expr)
444 #define PT_LOGGER_LOG_DEBUG(logger, expr) PT_LOGGER_LOG_IMPL(logger, Debug, expr)
445 #define PT_LOGGER_LOG_TRACE(logger, expr) PT_LOGGER_LOG_IMPL(logger, Trace, expr)
447 #define PT_LOGGER_BEGIN_FATAL(logger) PT_LOGGER_BEGIN_IMPL(logger, Fatal)
448 #define PT_LOGGER_BEGIN_ERROR(logger) PT_LOGGER_BEGIN_IMPL(logger, Error)
449 #define PT_LOGGER_BEGIN_WARN(logger) PT_LOGGER_BEGIN_IMPL(logger, Warn)
450 #define PT_LOGGER_BEGIN_INFO(logger) PT_LOGGER_BEGIN_IMPL(logger, Info)
451 #define PT_LOGGER_BEGIN_DEBUG(logger) PT_LOGGER_BEGIN_IMPL(logger, Debug)
452 #define PT_LOGGER_BEGIN_TRACE(logger) PT_LOGGER_BEGIN_IMPL(logger, Trace)
454 #endif // Pt_System_Logger_h
Log records can be added to a log.
Definition: LogRecord.h:90
Protects derived classes from being copied.
Definition: NonCopyable.h:54
bool enabled(const LogRecord &record) const
Returns true if the log level is enabled for the target.
Definition: Logger.h:205
const LogRecord & record() const
Returns the underlying log record.
Definition: Logger.h:304
LogLevel
Severity of the log-message.
Definition: LogLevel.h:41
LogLevel logLevel() const
Returns the severity level.
Definition: LogRecord.h:115
static void setLogLevel(const std::string &target, LogLevel level)
Sets the log-level of the target and its children.
Definition: Logger.h:183
static LogTarget & get(const std::string &name)
Get a target from the logging manager.
void setChannel(const std::string &url)
Sets the channel to be used by this target.
bool operator!() const
Returns true if the record's log level is disabled for the target.
Definition: Logger.h:323
LogMessage & endlog(LogMessage &msg)
Manipulator to end and send a log-message.
Definition: Logger.h:376
static void setChannel(const std::string &target, const std::string &url)
Sets the channel to be used by the target and its children.
Definition: Logger.h:193
Target of log-messages.
Definition: LogTarget.h:62
LogMessage & operator<<(LogMessage &(*pf)(LogMessage &))
Applies a manipulator to the log message.
Definition: Logger.h:356
void setLogLevel(LogLevel level)
Sets the log-level of the target and its children.
LogMessage & operator<<(std::ostream &(*op)(std::ostream &))
Applies op to the log record.
Definition: Logger.h:335
LogMessage(Logger &logger, const LogLevel &level, bool always=false)
Constructs a log message for a logger.
Definition: Logger.h:293
bool enabled(LogLevel level) const
Returns true if the log level is enabled for the target.
Definition: Logger.h:198
LogMessage & operator<<(const T &value)
Appends value to the log record.
Definition: Logger.h:328
LogMessage & operator<<(std::ios_base &(*op)(std::ios_base &))
Applies op to the log record.
Definition: Logger.h:349
~LogMessage()
Destructor.
Definition: Logger.h:300
void log(const LogRecord &record, bool always=false)
Write a log record to the target.
Definition: Logger.h:216
bool enabled() const
Returns true if the record's log level is enabled for the target.
Definition: Logger.h:315
Writes log records to a target.
Definition: Logger.h:95
void log()
Sends the message's log record to the logger.
Definition: Logger.h:308
Store application settings.
Definition: Settings.h:172
LogMessage & operator<<(std::ios &(*op)(std::ios &))
Applies op to the log record.
Definition: Logger.h:342
Logs records with a logger.
Definition: Logger.h:280