MercuryDPM  Trunk
Logger.h File Reference
#include <string>
#include <sstream>
#include <functional>
#include <type_traits>
#include <iomanip>
#include "GeneralDefine.h"
#include <iostream>

Go to the source code of this file.

## Classes

class  LoggerOutput
Default functions for output generation. More...

class  Logger< L, ASSERTS >
the Logger class is the main class of the logger implementation. It holds all the functions which invoke certain methods to create messages based on input parameter deductions. More...

class  LL< Level >
Tag for template metaprogramming. More...

class  Logger< L, ASSERTS >
the Logger class is the main class of the logger implementation. It holds all the functions which invoke certain methods to create messages based on input parameter deductions. More...

## Macros

#define MERCURY_LOGLEVEL   Log::DEFAULT

#define CG_LOGLEVEL   Log::DEFAULT

#define MERCURY_ASSERTS   true

#define assert(e,...)   assert(true,"")

## Enumerations

enum  Flusher { Flusher::FLUSH, Flusher::NO_FLUSH }
The Logger class provides ability to write log messages in your own customized format. More...

enum  Log : signed char {
Log::FATAL = -20, Log::ERROR = -15, Log::WARN = -10, Log::INFO = -5,
Log::DEFAULT = 0, Log::VERBOSE = 5, Log::DEBUG = 10
}
The different loglevels. More...

## Functions

constexpr bool operator<= (const Log rhs, const Log lhs)
Internally used to filter on loglevel. Do not edit, as this is required for an optimised logger. More...

## Variables

LoggerOutputloggerOutput
Declaration of the output functions. More...

LL< Log::FATAL > FATAL
Fatal log level. More...

LL< Log::ERROR > ERROR
Error log level. More...

LL< Log::WARN > WARN
Warning log level. More...

LL< Log::INFO > INFO
Info log level. More...

LL< Log::DEFAULT > DEFAULT
Default log level. More...

LL< Log::VERBOSE > VERBOSE
Verbose information. More...

LL< Log::DEBUG > DEBUG
Debug information. More...

Logger< MERCURY_LOGLEVELlogger
Definition of different loggers with certain modules. A user can define its own custom logger here. More...

Logger< CG_LOGLEVELcgLogger

## Macro Definition Documentation

 #define assert ( e, ... ) assert(true,"")

Definition at line 769 of file Logger.h.

 #define CG_LOGLEVEL   Log::DEFAULT

Definition at line 46 of file Logger.h.

 #define MERCURY_ASSERTS   true

Definition at line 63 of file Logger.h.

 #define MERCURY_LOGLEVEL   Log::DEFAULT

Definition at line 42 of file Logger.h.

Referenced by Logger< L, ASSERTS >::createMessage().

## Enumeration Type Documentation

 enum Flusher
strong

The Logger class provides ability to write log messages in your own customized format.

logger objects can be globally called on different loglevels whose usage is briefly explained where they have been declared down below.

The previous version of the Logger used the syntax Logger<Log::LEVEL> logger; which is now predefined in logger.cc.

The operator() function is utilized in this logger to keep log messages in a single statement of format:

 logger(Log::LEVEL, "Message", args...);


Where args... is a user defined pack of parameters. Each parameter is denoted by a percentage character %, see example below.

logger(INFO, "The current timestep is %.", getTimeStep()); OUTPUT: The current timestep is 0.0104124.

The output of arguments an also be customized by a certain precision or width. A number following the percentage character is defined as the precision of the parameter (e.g. %12), whereas a full stop followed by a number is defined as the output width of a parameter (e.g. %.10). Here std::left was chosen as default positioning. See examples below.

logger(INFO, "The current timestep is %12.", getTimestep()); OUTPUT: The current timestep is 0.01020304917.

logger(INFO, "The current timestep is %.12.", getTimestep()); OUTPUT: The current timestep is 0.0102051 .

logger(INFO, "The current timestep is %12.14.", getTimestep()); OUTPUT: The current timestep is 0.01020304917 .

After each invocation of the logger the output is flushed. To speed-up the code it is key to avoid flushing of the output wherever possible. Therefore, escape characters such as "\n" are preferred over std::endl. Furthermore if a parameter pack of the logger contains the argument Flusher::NO_FLUSH it will skip the use of std::endl after logger invocation.

Default loglevel is Log::DEFAULT = 0.

Enum class which enables/disables flushing of output.

the Flusher class is only used if the loglevel is below VERBOSE and DEBUG and if the CMAKE_BUILD_TYPE is not "Debug". If Flusher::NO_FLUSH is added as an argument to a logger invocation it will prevent the logger to call std::endl and flush the ouput at the end of the call. This is mainly utilized to speed up the code when logging messages.

Enumerator
FLUSH
NO_FLUSH

Definition at line 118 of file Logger.h.

119 {
120  FLUSH,
121  NO_FLUSH
122 };
 enum Log : signed char
strong

The different loglevels.

The different loglevels, represented as signed characters, in descending order of severeness. Worst is FATAL, best is DEBUG.

Please, use the tags FATAL/ERROR/etc without class/enum/namespace.

Enumerator
FATAL
ERROR
WARN
INFO
DEFAULT
VERBOSE
DEBUG

Definition at line 132 of file Logger.h.

133  : signed char
134 {
135  FATAL = -20, ERROR = -15, WARN = -10, INFO = -5, DEFAULT = 0, VERBOSE = 5, DEBUG = 10
136 };
LL< Log::INFO > INFO
Info log level.
Definition: Logger.cc:55
LL< Log::DEBUG > DEBUG
Debug information.
Definition: Logger.cc:58
LL< Log::ERROR > ERROR
Error log level.
Definition: Logger.cc:53
LL< Log::DEFAULT > DEFAULT
Default log level.
Definition: Logger.cc:56
LL< Log::VERBOSE > VERBOSE
Verbose information.
Definition: Logger.cc:57
LL< Log::FATAL > FATAL
Fatal log level.
Definition: Logger.cc:52
LL< Log::WARN > WARN
Warning log level.
Definition: Logger.cc:54

## Function Documentation

 constexpr bool operator<= ( const Log rhs, const Log lhs )

Internally used to filter on loglevel. Do not edit, as this is required for an optimised logger.

used for the implementation of different loglevels; the operator compares current loglevel to a fixed one and thus checks if a message should be logged.

Definition at line 144 of file Logger.h.

145 {
146  return ((static_cast<signed char>(rhs)) <= (static_cast<signed char>(lhs)));
147 }

## Variable Documentation

 Logger cgLogger
 LL DEBUG

Debug information.

Only used for internal development. Can be very cryptic, as it is only meant for finding bugs / oddities by the internal development team.

Example: Collision found between Particle #38201 and Wall #5

Default behaviour: ignore.

Definition at line 58 of file Logger.cc.

 LL DEFAULT

Default log level.

Only useful for defining the loglevel of the logger itself. Should not actually be used.

Definition at line 56 of file Logger.cc.

 LL ERROR

Error log level.

Error, as in, the program has found a severe problem which it cannot resolve any further. It does not know how to recover in a sane way. The difference to FATAL is mainly that this type of failure is most often caused by human error.

Example: Negative time step, Infinite end time and no override of the continuation function.

Default behaviour: log to std::cerr, followed by std::exit().

Definition at line 53 of file Logger.cc.

 LL FATAL

Fatal log level.

The following are the loglevels which should be used to control the logger. They are declared here but defined in Logger.cc.

Fatal, as in, the program has suffered from the worst possible failure and there is no way it can gracefully recover. The difference to ERROR is mainly that this type of failure is most often caused by non-human error

Example: No memory allocations possible

Default behaviour: log to std::cerr, followed by std::exit().

Fatal log level.

Definition at line 52 of file Logger.cc.

Referenced by main(), and transformMercuryToVTK().

 LL INFO

Info log level.

Useful information, small oddities and statistics which should be of no real effect to the user, but still give useful information about the current state and progress of the program.

Example: Finished inserting 381 particles.

Default behaviour: log to std::cout, returns afterwards.

Definition at line 55 of file Logger.cc.

 LoggerOutput* loggerOutput

Declaration of the output functions.

If the output needs to be redirected, please swap the loggerOutput pointer to your preferred LoggerOutput instance, and make sure this exists until AFTER an std::exit() invocation. (e.g. clean up with std::atexit())

Definition at line 283 of file Logger.cc.

 LL VERBOSE

Verbose information.

Information which is not useful to anybody except those looking for weird behaviour. These should however still be clear in meaning.

Example: Finished creating a particle.

Default behaviour: ignore.

Definition at line 57 of file Logger.cc.

Referenced by NurbsSurface::getDistance(), main(), and BaseHandler< T >::read().

 LL WARN

Warning log level.

Warning, as in, the program has detected a problem but does know a solution. The simulation can continue with this fix, but the user should look at fixing his / her simulation so this won't occur in the future.

Example: Setting a smaller Xmax than Xmin.

Default behaviour: log to std::cerr, returns afterwards.

Definition at line 54 of file Logger.cc.