Log levels documentation
Add a log level
To add a log level, you must respect the following structure and add it to the appropriate LogLevelsInfos.hpp
:
struct MyMessage
{
static constexpr int getMinLogLevel() { return 2; }
static constexpr std::string_view getDescription() { return msg; }
};
If there is no LogLevelsInfos.hpp
in the corresponding folder, you can create a LogLevelsInfos.hpp
.
Note
We encourage anyone adding a logInfo to add it in the constructor(s) of the class(es) emitting the information, while ignoring any polymorphism concern (avoid to add it in a base class, else it can result in undesired documentation entries for other inheriting classes). Do not worry to add a logInfo multiple times by on an instance, the system will filter any doubles.
Example of usage
To log a message with a log level, 4 macros are defined in LogLevelsInfo.hpp located in dataRepository:
GEOS_LOG_LEVEL( logInfoStruct, msg )
: Output messages based on currentGroup
’s log level.GEOS_LOG_LEVEL_RANK_0( logInfoStruct, msg )
: Output messages (only on rank 0) based on currentGroup
’s log level.GEOS_LOG_LEVEL_BY_RANK( logInfoStruct, msg )
: Output messages (with one line per rank) based on currentGroup
’s log level.GEOS_LOG_LEVEL_RANK_0_NLR( logInfoStruct, msg )
: Output messages (only on rank 0) based on currentGroup
’s log level without the line return.
If you want to add a log level with a target log level belonging to another group, 4 others macro with the same mecanism are defined in LogLevelsInfo.hpp located in dataRepository:
GEOS_LOG_LEVEL_ON_GROUP( logInfoStruct, msg, group )
: Output messages based on targetedgroup
’s log level.GEOS_LOG_LEVEL_RANK_0_ON_GROUP( logInfoStruct, msg, group )
: Output messages (only on rank 0) based on targetedgroup
’s log level.GEOS_LOG_LEVEL_BY_RANK_ON_GROUP( logInfoStruct, msg, group )
: Output messages (with one line per rank) based on targetedgroup
’s log level.GEOS_LOG_LEVEL_RANK_0_NLR_ON_GROUP( logInfoStruct, msg, group )
: Output messages (only on rank 0) based on targetedgroup
’s log level without the line return.
An exemple of adding and using a log level in a group
:
MyGroup::MyGroup( string const & name );
{
// To use a log level, make sure it is declared in the constructor of the group
addLogLevel< logInfo::MyMessage >();
}
void MyGroup::outputMessage()
{
// effectively output the message taking into account the log level of the group instance
GEOS_LOG_LEVEL( logInfo::MyMessage, "output some message" );
}