Tizen Native API
5.0
|
Full-featured logging system.
Eina provides eina_log_print(), a standard function to manage all logging messages. This function may be called directly or using the helper macros such as EINA_LOG_DBG(), EINA_LOG_ERR() or those that take a specific domain as argument EINA_LOG_DOM_DBG(), EINA_LOG_DOM_ERR(). Internally, eina_log_print() will call the function defined with eina_log_print_cb_set(), that defaults to eina_log_print_cb_stderr(), but may be changed to do whatever you need, such as networking or syslog logging.
The logging system is thread safe once initialized with eina_log_threads_enable(). The thread that calls this function first is considered "main thread" and other threads will have their thread id (pthread_self()) printed in the log message so it is easy to detect from where it is coming.
Log domains is the Eina way to differentiate messages. There might be different domains to represent different modules, different feature-set, different categories and so on. Filtering can be applied to domain names by means of EINA_LOG_LEVELS
environment variable or eina_log_domain_level_set().
The different logging levels serve to customize the amount of debugging one want to take and may be used to automatically call abort() once some given level message is printed. This is controlled by environment variable EINA_LOG_ABORT
and the level to be considered critical with EINA_LOG_ABORT_LEVEL
. These can be changed with eina_log_abort_on_critical_set() and eina_log_abort_on_critical_level_set().
The default maximum level to print is defined by environment variable EINA_LOG_LEVEL
, but may be set per-domain with EINA_LOG_LEVELS
. It will default to EINA_LOG_ERR. This can be changed with eina_log_level_set().
To use the log system Eina must be initialized with eina_init() and later shut down with eina_shutdown(). Here is a straightforward example:
//Compile with: //gcc -Wall -o eina_log_01 eina_log_01.c `pkg-config --cflags --libs eina` #include <stdlib.h> #include <stdio.h> #include <Eina.h> void test_warn(void) { EINA_LOG_WARN("Here is a warning message"); } int main(void) { if (!eina_init()) { printf("log during the initialization of Eina_Log module\n"); return EXIT_FAILURE; } test_warn(); eina_shutdown(); return EXIT_SUCCESS; }
Compile this code with the following command:
gcc -Wall -o eina_log_01 eina_log_01.c `pkg-config --cflags --libs eina`
Now execute the program with:
EINA_LOG_LEVEL=2 ./eina_log_01
You should see a message displayed in the terminal.
For more information, you can look at the Log Tutorial.
Functions | |
void | eina_log_threads_enable (void) |
void | eina_log_print_cb_set (Eina_Log_Print_Cb cb, void *data) |
void | eina_log_level_set (int level) |
Sets the default log level. | |
int | eina_log_level_get (void) |
Gets the default log level. | |
static Eina_Bool | eina_log_level_check (int level) |
Determines if a given level should be logged. | |
Eina_Bool | eina_log_main_thread_check (void) |
Checks if current thread is the main thread. | |
void | eina_log_color_disable_set (Eina_Bool disabled) |
Enables or disables colored text in the logs. | |
Eina_Bool | eina_log_color_disable_get (void) |
Determines if color logging is enabled or disabled. | |
void | eina_log_file_disable_set (Eina_Bool disabled) |
Sets if originating file name logging should be disabled. | |
Eina_Bool | eina_log_file_disable_get (void) |
Gets if originating file name logging should be disabled. | |
void | eina_log_function_disable_set (Eina_Bool disabled) |
Sets if originating function name logging should be disabled. | |
Eina_Bool | eina_log_function_disable_get (void) |
Gets if originating function name logging should be disabled. | |
void | eina_log_abort_on_critical_set (Eina_Bool abort_on_critical) |
Sets if critical messages should abort the program. | |
Eina_Bool | eina_log_abort_on_critical_get (void) |
Gets if critical messages should abort the program. | |
void | eina_log_abort_on_critical_level_set (int critical_level) |
Sets level that triggers abort if abort-on-critical is set. | |
int | eina_log_abort_on_critical_level_get (void) |
Gets level that triggers abort if abort-on-critical is set. | |
void | eina_log_domain_level_set (const char *domain_name, int level) |
Sets the domain level given its name. | |
int | eina_log_domain_level_get (const char *domain_name) |
Gets the domain level given its name. | |
int | eina_log_domain_registered_level_get (int domain) |
Gets the domain level given its identifier. | |
void | eina_log_domain_registered_level_set (int domain, int level) |
Sets the domain level given its identifier. | |
int | eina_log_domain_register (const char *name, const char *color) |
void | eina_log_domain_unregister (int domain) |
Forgets about a logging domain registered by eina_log_domain_register() | |
void | eina_log_print (int domain, Eina_Log_Level level, const char *file, const char *function, int line, const char *fmt,...) |
Prints out log message using given domain and level. | |
void | eina_log_vprint (int domain, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, va_list args) |
Prints out log message using given domain and level. | |
void | eina_log_print_cb_stdout (const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args) |
Alternative logging method, this will output to standard output stream. | |
void | eina_log_print_cb_stderr (const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args) |
Default logging method, this will output to standard error stream. | |
void | eina_log_print_cb_file (const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args) |
Alternative logging method, this will output to given file stream. | |
void | eina_log_print_cb_syslog (const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args) |
Alternative logging function, this outputs to the system log. | |
void | eina_log_print_cb_journald (const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args) |
Alternative logging method, this will output to systemd journal. | |
void | eina_log_console_color_set (FILE *fp, const char *color) |
Configures console color of given file. | |
void | eina_log_timing (int domain, Eina_Log_State state, const char *phase) |
Starts or stops the timing of a phase. | |
Typedefs | |
typedef struct _Eina_Log_Domain | Eina_Log_Domain |
typedef enum _Eina_Log_Level | Eina_Log_Level |
typedef void(* | Eina_Log_Print_Cb )(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args) |
typedef enum _Eina_Log_State | Eina_Log_State |
Defines | |
#define | EINA_LOG_DOMAIN_DEFAULT EINA_LOG_DOMAIN_GLOBAL |
#define | EINA_LOG(DOM, LEVEL, fmt,...) do { (void) DOM; (void) LEVEL; (void) fmt; } while (0) |
#define | EINA_LOG_DOM_CRIT(DOM, fmt,...) EINA_LOG(DOM, EINA_LOG_LEVEL_CRITICAL, fmt, ## __VA_ARGS__) |
#define | EINA_LOG_DOM_ERR(DOM, fmt,...) EINA_LOG(DOM, EINA_LOG_LEVEL_ERR, fmt, ## __VA_ARGS__) |
#define | EINA_LOG_DOM_INFO(DOM, fmt,...) EINA_LOG(DOM, EINA_LOG_LEVEL_INFO, fmt, ## __VA_ARGS__) |
#define | EINA_LOG_DOM_DBG(DOM, fmt,...) EINA_LOG(DOM, EINA_LOG_LEVEL_DBG, fmt, ## __VA_ARGS__) |
#define | EINA_LOG_DOM_WARN(DOM, fmt,...) EINA_LOG(DOM, EINA_LOG_LEVEL_WARN, fmt, ## __VA_ARGS__) |
#define | EINA_LOG_CRIT(fmt,...) |
#define | EINA_LOG_ERR(fmt,...) EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, EINA_LOG_LEVEL_ERR, fmt, ## __VA_ARGS__) |
#define | EINA_LOG_INFO(fmt,...) EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, EINA_LOG_LEVEL_INFO, fmt, ## __VA_ARGS__) |
#define | EINA_LOG_WARN(fmt,...) EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, EINA_LOG_LEVEL_WARN, fmt, ## __VA_ARGS__) |
#define | EINA_LOG_DBG(fmt,...) EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, EINA_LOG_LEVEL_DBG, fmt, ## __VA_ARGS__) |
#define | EINA_LOG_STATE_INIT _eina_log_state_init |
#define | EINA_LOG_STATE_SHUTDOWN _eina_log_state_shutdown |
#define EINA_LOG | ( | DOM, | |
LEVEL, | |||
fmt, | |||
... | |||
) | do { (void) DOM; (void) LEVEL; (void) fmt; } while (0) |
Logs a message on the specified domain, level and format.
EINA_LOG_LEVEL_MAXIMUM
is defined, then messages larger than this value will be ignored regardless of current domain level, the eina_log_print() is not even called! Most compilers will just detect the two integers make the branch impossible and remove the branch and function call all together. Take this as optimization tip and possible remove debug messages from binaries to be deployed, saving on hot paths. Never define EINA_LOG_LEVEL_MAXIMUM
on public header files. #define EINA_LOG_CRIT | ( | fmt, | |
... | |||
) |
EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, \ EINA_LOG_LEVEL_CRITICAL, \ fmt, \ ## __VA_ARGS__)
Logs a message with level CRITICAL on the default domain with the specified format.
#define EINA_LOG_DBG | ( | fmt, | |
... | |||
) | EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, EINA_LOG_LEVEL_DBG, fmt, ## __VA_ARGS__) |
Logs a message with level DEBUG on the default domain with the specified format.
#define EINA_LOG_DOM_CRIT | ( | DOM, | |
fmt, | |||
... | |||
) | EINA_LOG(DOM, EINA_LOG_LEVEL_CRITICAL, fmt, ## __VA_ARGS__) |
Logs a message with level CRITICAL on the specified domain and format.
#define EINA_LOG_DOM_DBG | ( | DOM, | |
fmt, | |||
... | |||
) | EINA_LOG(DOM, EINA_LOG_LEVEL_DBG, fmt, ## __VA_ARGS__) |
Logs a message with level DEBUG on the specified domain and format.
#define EINA_LOG_DOM_ERR | ( | DOM, | |
fmt, | |||
... | |||
) | EINA_LOG(DOM, EINA_LOG_LEVEL_ERR, fmt, ## __VA_ARGS__) |
Logs a message with level ERROR on the specified domain and format.
#define EINA_LOG_DOM_INFO | ( | DOM, | |
fmt, | |||
... | |||
) | EINA_LOG(DOM, EINA_LOG_LEVEL_INFO, fmt, ## __VA_ARGS__) |
Logs a message with level INFO on the specified domain and format.
#define EINA_LOG_DOM_WARN | ( | DOM, | |
fmt, | |||
... | |||
) | EINA_LOG(DOM, EINA_LOG_LEVEL_WARN, fmt, ## __VA_ARGS__) |
Logs a message with level WARN on the specified domain and format.
This macro defines the domain to use with the macros EINA_LOG_DOM_DBG(), EINA_LOG_DOM_INFO(), EINA_LOG_DOM_WARN(), EINA_LOG_DOM_ERR() and EINA_LOG_DOM_CRIT().
If not defined prior to the inclusion of this header, then it defaults to EINA_LOG_DOMAIN_GLOBAL.
#include <Eina.h> #undef EINA_LOG_DOMAIN_DEFAULT #define EINA_LOG_DOMAIN_DEFAULT _log_dom static int _log_dom = -1; int main(void) { eina_init(); _log_dom = eina_log_domain_register("mydom", EINA_COLOR_CYAN); EINA_LOG_ERR("using my own domain"); return 0; }
#define EINA_LOG_DOMAIN_DEFAULT _log_dom static int _log_dom = -1; // must come before inclusion of Eina.h! #include <Eina.h> int main(void) { eina_init(); _log_dom = eina_log_domain_register("mydom", EINA_COLOR_CYAN); EINA_LOG_ERR("using my own domain"); return 0; }
#define EINA_LOG_ERR | ( | fmt, | |
... | |||
) | EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, EINA_LOG_LEVEL_ERR, fmt, ## __VA_ARGS__) |
Logs a message with level ERROR on the default domain with the specified format.
#define EINA_LOG_INFO | ( | fmt, | |
... | |||
) | EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, EINA_LOG_LEVEL_INFO, fmt, ## __VA_ARGS__) |
Logs a message with level INFO on the default domain with the specified format.
String that indicates the log system is initializing
String that indicates the log system is shutting down
#define EINA_LOG_WARN | ( | fmt, | |
... | |||
) | EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, EINA_LOG_LEVEL_WARN, fmt, ## __VA_ARGS__) |
Logs a message with level WARN on the default domain with the specified format.
The domain used for logging.
List of available logging levels.
Type for print callbacks.
List of available log states.
enum _Eina_Log_Level |
List of available logging levels.
enum _Eina_Log_State |
List of available log states.
Eina_Bool eina_log_abort_on_critical_get | ( | void | ) |
Gets if critical messages should abort the program.
int eina_log_abort_on_critical_level_get | ( | void | ) |
Gets level that triggers abort if abort-on-critical is set.
void eina_log_abort_on_critical_level_set | ( | int | critical_level | ) |
Sets level that triggers abort if abort-on-critical is set.
critical_level | Levels equal or smaller than the given value will trigger program abortion if eina_log_abort_on_critical_get() returns EINA_TRUE. |
void eina_log_abort_on_critical_set | ( | Eina_Bool | abort_on_critical | ) |
Sets if critical messages should abort the program.
abort_on_critical | If EINA_TRUE, messages with level equal or smaller than eina_log_abort_on_critical_level_get() will abort the program. |
Eina_Bool eina_log_color_disable_get | ( | void | ) |
Determines if color logging is enabled or disabled.
void eina_log_color_disable_set | ( | Eina_Bool | disabled | ) |
Enables or disables colored text in the logs.
disabled | If EINA_TRUE, color logging should be disabled. |
void eina_log_console_color_set | ( | FILE * | fp, |
const char * | color | ||
) |
Configures console color of given file.
fp | File to configure console color (usually stderr or stdout). |
color | A VT color code such as EINA_COLOR_RED or EINA_COLOR_RESET. |
int eina_log_domain_level_get | ( | const char * | domain_name | ) |
Gets the domain level given its name.
domain_name | Domain name to retrieve the level. It may be of a still not registered domain. If the domain is not registered yet, but there is a pending value, either from eina_log_domain_level_set(),EINA_LOG_LEVELS environment variable or from EINA_LOG_LEVELS_GLOB, these are returned. If nothing else was found, then the global/default level (eina_log_level_get()) is returned. |
domain_name
== NULL), EINA_LOG_LEVEL_UNKNOWN is returned.void eina_log_domain_level_set | ( | const char * | domain_name, |
int | level | ||
) |
Sets the domain level given its name.
This call has the same effect as setting EINA_LOG_LEVELS=<domain_name>
:<level>
domain_name | Domain name to change the level. It may be of a still not registered domain. If the domain is not registered yet, it will be saved as a pending set and applied upon registration. |
level | Level to use to limit eina_log_print() for given domain. |
int eina_log_domain_register | ( | const char * | name, |
const char * | color | ||
) |
name | Domain name |
color | Color of the domain name |
int eina_log_domain_registered_level_get | ( | int | domain | ) |
Gets the domain level given its identifier.
domain | Identifier, so it must be previously registered with eina_log_domain_register(). It's a much faster version of eina_log_domain_level_get(), but relies on domain being present. |
void eina_log_domain_registered_level_set | ( | int | domain, |
int | level | ||
) |
Sets the domain level given its identifier.
domain | Identifier, so it must be previously registered with eina_log_domain_register(). It's a much faster version of eina_log_domain_level_get(), but relies on domain being present. |
level | Level to use to limit eina_log_print() for given domain. |
void eina_log_domain_unregister | ( | int | domain | ) |
Forgets about a logging domain registered by eina_log_domain_register()
domain | Domain identifier as reported by eina_log_domain_register(), must be >= 0. |
Eina_Bool eina_log_file_disable_get | ( | void | ) |
Gets if originating file name logging should be disabled.
void eina_log_file_disable_set | ( | Eina_Bool | disabled | ) |
Sets if originating file name logging should be disabled.
disabled | If EINA_TRUE, file name logging should be disabled. |
Eina_Bool eina_log_function_disable_get | ( | void | ) |
Gets if originating function name logging should be disabled.
void eina_log_function_disable_set | ( | Eina_Bool | disabled | ) |
Sets if originating function name logging should be disabled.
disabled | If EINA_TRUE, function name logging should be disabled. |
static Eina_Bool eina_log_level_check | ( | int | level | ) | [static] |
Determines if a given level
should be logged.
level
should be logged, else EINA_FALSE.int eina_log_level_get | ( | void | ) |
Gets the default log level.
void eina_log_level_set | ( | int | level | ) |
Sets the default log level.
level | The log level. |
This function sets the log level level
. It is used in eina_log_print().
Eina_Bool eina_log_main_thread_check | ( | void | ) |
Checks if current thread is the main thread.
If there is no thread support (compiled with --disable-pthreads) or threads were not enabled, then EINA_TRUE is returned. The only case where EINA_FALSE is returned is when threads were successfully enabled but the current thread is not the one that called eina_log_threads_init() (the main thread).
void eina_log_print | ( | int | domain, |
Eina_Log_Level | level, | ||
const char * | file, | ||
const char * | function, | ||
int | line, | ||
const char * | fmt, | ||
... | |||
) |
Prints out log message using given domain and level.
domain | Logging domain to use or EINA_LOG_DOMAIN_GLOBAL if you registered none. It is recommended that modules and applications have their own logging domain. |
level | Message level, those with level greater than user specified value (eina_log_level_set() or environment variables EINA_LOG_LEVEL, EINA_LOG_LEVELS) will be ignored. |
file | Filename that originated the call, must not be NULL . |
function | Function that originated the call, must not be NULL . |
line | Originating line in file. |
fmt | Printf-like format to use. Should not provide trailing ' ' as it is automatically included. |
... | Variadic args. |
void eina_log_print_cb_file | ( | const Eina_Log_Domain * | d, |
Eina_Log_Level | level, | ||
const char * | file, | ||
const char * | fnc, | ||
int | line, | ||
const char * | fmt, | ||
void * | data, | ||
va_list | args | ||
) |
Alternative logging method, this will output to given file stream.
d | The domain. |
level | Not used. |
file | The file which is logged. |
fnc | The function which is logged. |
line | The line which is logged. |
fmt | The ouptut format to use. |
data | The file which will store the output (as a FILE *). |
args | The arguments needed by the format. |
This method will never output color.
void eina_log_print_cb_journald | ( | const Eina_Log_Domain * | d, |
Eina_Log_Level | level, | ||
const char * | file, | ||
const char * | fnc, | ||
int | line, | ||
const char * | fmt, | ||
void * | data, | ||
va_list | args | ||
) |
Alternative logging method, this will output to systemd journal.
d | The domain. |
level | Not used. |
file | The file which is logged. |
fnc | The function which is logged. |
line | The line which is logged. |
fmt | The ouptut format to use. |
data | The file which will store the output (as a FILE *). |
args | The arguments needed by the format. |
This method will never output color.
void eina_log_print_cb_set | ( | Eina_Log_Print_Cb | cb, |
void * | data | ||
) |
Sets logging method to use.
cb | The callback to call when printing a log. |
data | The data to pass to the callback. |
By default, eina_log_print_cb_stderr() is used.
void eina_log_print_cb_stderr | ( | const Eina_Log_Domain * | d, |
Eina_Log_Level | level, | ||
const char * | file, | ||
const char * | fnc, | ||
int | line, | ||
const char * | fmt, | ||
void * | data, | ||
va_list | args | ||
) |
Default logging method, this will output to standard error stream.
d | The domain. |
level | The level. |
file | The file which is logged. |
fnc | The function which is logged. |
line | The line which is logged. |
fmt | The ouptut format to use. |
data | Not used. |
args | The arguments needed by the format. |
This method will colorize output based on domain provided color and message logging level.
To disable color, set environment variable EINA_LOG_COLOR_DISABLE=1. To enable color, even if directing to a file or when using a non-supported color terminal, use EINA_LOG_COLOR_DISABLE=0. If EINA_LOG_COLOR_DISABLE is unset (or -1), then Eina will disable color if terminal ($TERM) is unsupported or if redirecting to a file.
. Similarly, to disable file and line information, set EINA_LOG_FILE_DISABLE=1 or EINA_LOG_FUNCTION_DISABLE=1 to avoid function name in output. It is not acceptable to have both EINA_LOG_FILE_DISABLE and EINA_LOG_FUNCTION_DISABLE at the same time, in this case just EINA_LOG_FUNCTION_DISABLE will be considered and file information will be printed anyways.
void eina_log_print_cb_stdout | ( | const Eina_Log_Domain * | d, |
Eina_Log_Level | level, | ||
const char * | file, | ||
const char * | fnc, | ||
int | line, | ||
const char * | fmt, | ||
void * | data, | ||
va_list | args | ||
) |
Alternative logging method, this will output to standard output stream.
d | The domain. |
level | The level. |
file | The file which is logged. |
fnc | The function which is logged. |
line | The line which is logged. |
fmt | The ouptut format to use. |
data | Not used. |
args | The arguments needed by the format. |
This method will colorize output based on domain provided color and message logging level. To disable color, set environment variable EINA_LOG_COLOR_DISABLE=1. Similarly, to disable file and line information, set EINA_LOG_FILE_DISABLE=1 or EINA_LOG_FUNCTION_DISABLE=1 to avoid function name in output. It is not acceptable to have both EINA_LOG_FILE_DISABLE and EINA_LOG_FUNCTION_DISABLE at the same time, in this case just EINA_LOG_FUNCTION_DISABLE will be considered and file information will be printed anyways.
void eina_log_print_cb_syslog | ( | const Eina_Log_Domain * | d, |
Eina_Log_Level | level, | ||
const char * | file, | ||
const char * | fnc, | ||
int | line, | ||
const char * | fmt, | ||
void * | data, | ||
va_list | args | ||
) |
Alternative logging function, this outputs to the system log.
This function never gives color as the output.
[in] | d | The domain |
[in] | level | Not used |
[in] | file | The file that is logged |
[in] | fnc | The function that is logged |
[in] | line | The line that is logged |
[in] | fmt | The ouptut format to use |
[in] | data | Not Used |
[in] | args | The arguments needed by the format |
void eina_log_threads_enable | ( | void | ) |
Enable logging module to handle threads.
There is no disable option on purpose, if it is enabled, there is no way back until you call the last eina_shutdown().
There is no function to retrieve if threads are enabled as one is not supposed to know this from outside.
After this call is executed at least once, if Eina was compiled with threads support then logging will lock around debug messages and threads that are not the main thread will have its identifier printed.
The main thread is considered the thread where the first eina_init() was called.
void eina_log_timing | ( | int | domain, |
Eina_Log_State | state, | ||
const char * | phase | ||
) |
Starts or stops the timing of a phase.
domain | The domain. |
state | State indicating if we are starting or stopping a phase. |
phase | The name of the phase to be used in the log. |
void eina_log_vprint | ( | int | domain, |
Eina_Log_Level | level, | ||
const char * | file, | ||
const char * | fnc, | ||
int | line, | ||
const char * | fmt, | ||
va_list | args | ||
) |
Prints out log message using given domain and level.
domain | Logging domain to use or EINA_LOG_DOMAIN_GLOBAL if you registered none. It is recommended that modules and applications have their own logging domain. |
level | Message level, those with level greater than user specified value (eina_log_level_set() or environment variables EINA_LOG_LEVEL, EINA_LOG_LEVELS) will be ignored. |
file | Filename that originated the call, must not be NULL . |
fnc | Function that originated the call, must not be NULL . |
line | Originating line in file. |
fmt | Printf-like format to use. Should not provide trailing ' ' as it is automatically included. |
args | The arguments needed by the format. |
const char* _eina_log_state_init |
String that indicates the log system is initializing.
const char* _eina_log_state_shutdown |
String that indicates the log system is shutting down.
EINA_LOG_DOMAIN_GLOBAL is the general purpose log domain to be used, it is always registered and available everywhere.