diff --git a/doc/Makefile b/doc/Makefile
index 764a1409c03..48f5b37d030 100644
--- a/doc/Makefile
+++ b/doc/Makefile
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: BSD-3-Clause
-# Copyright 2014-2023, Intel Corporation
+# Copyright 2014-2024, Intel Corporation
#
#
@@ -18,6 +18,7 @@ MANPAGES_3_MD = libpmem/pmem_flush.3.md libpmem/pmem_is_pmem.3.md libpmem/pmem_m
libpmemobj/pmemobj_list_insert.3.md libpmemobj/pmemobj_memcpy_persist.3.md libpmemobj/pmemobj_mutex_zero.3.md \
libpmemobj/pmemobj_open.3.md libpmemobj/pmemobj_root.3.md libpmemobj/pmemobj_tx_begin.3.md libpmemobj/pmemobj_tx_add_range.3.md \
libpmemobj/pmemobj_tx_alloc.3.md libpmemobj/pobj_layout_begin.3.md libpmemobj/pobj_list_head.3.md libpmemobj/toid_declare.3.md \
+ libpmemobj/pmemobj_log_get_threshold.3.md libpmemobj/pmemobj_log_set_function.3.md libpmemobj/pmemobj_log_set_threshold.3.md \
libpmempool/pmempool_check_init.3.md libpmempool/pmempool_feature_query.3.md libpmempool/pmempool_rm.3.md libpmempool/pmempool_sync.3.md
MANPAGES_1_MD = pmempool/pmempool.1.md pmempool/pmempool-info.1.md pmempool/pmempool-create.1.md \
diff --git a/doc/libpmemobj/.gitignore b/doc/libpmemobj/.gitignore
index 19523dae4f9..f0e1a6f0f43 100644
--- a/doc/libpmemobj/.gitignore
+++ b/doc/libpmemobj/.gitignore
@@ -5,6 +5,9 @@ pmemobj_alloc.3
pmemobj_ctl_get.3
pmemobj_first.3
pmemobj_list_insert.3
+pmemobj_log_get_threshold.3
+pmemobj_log_set_function.3
+pmemobj_log_set_threshold.3
pmemobj_memcpy_persist.3
pmemobj_mutex_zero.3
pmemobj_open.3
diff --git a/doc/libpmemobj/pmemobj_log_get_threshold.3.md b/doc/libpmemobj/pmemobj_log_get_threshold.3.md
new file mode 100644
index 00000000000..0fafe5c8f4e
--- /dev/null
+++ b/doc/libpmemobj/pmemobj_log_get_threshold.3.md
@@ -0,0 +1,56 @@
+---
+draft: false
+slider_enable: true
+description: ""
+disclaimer: "The contents of this web site and the associated GitHub repositories are BSD-licensed open source."
+aliases: ["pmemobj_log_get_threshold.3.html"]
+title: "libpmemobj | PMDK"
+header: "pmemobj API version 2.3"
+---
+
+[comment]: <> (SPDX-License-Identifier: BSD-3-Clause)
+[comment]: <> (Copyright 2024, Intel Corporation)
+
+[comment]: <> (pmemobj_log_get_threshold.3 -- get the logging threshold value)
+
+[NAME](#name)
+[SYNOPSIS](#synopsis)
+[DESCRIPTION](#description)
+[RETURN VALUE](#return-value)
+[ERRORS](#errors)
+[SEE ALSO](#see-also)
+
+# NAME #
+
+**pmemobj_log_get_threshold** - get the logging threshold value
+
+# SYNOPSIS #
+
+```c
+ #include
+
+ int pmemobj_log_get_threshold(enum pmemobj_log_threshold threshold,
+ enum pmemobj_log_level *value);
+```
+
+# DESCRIPTION #
+
+**pmemobj_log_get_threshold**() gets the current *value* of the *threshold*.
+See **pmemobj_log_set_threshold**(3) for available thresholds and values.
+
+# RETURN VALUE #
+
+On success, **pmemobj_log_get_threshold**() function returns 0 and writes into
+*value* the current value of the *threshold*. On failure, it returns
+a non-zero value and sets errno. In case of failure, the *value* contents is undefined.
+
+# ERRORS #
+
+**pmemobj_log_get_threshold**() can fail with the following errors:
+
+ - EINVAL - *threshold* is not **PMEMOBJ_LOG_THRESHOLD** nor **PMEMOBJ_LOG_THRESHOLD_AUX**
+ - EINVAL - *value* is NULL
+
+# SEE ALSO #
+
+**pmemobj_log_set_function**(3), **pmemobj_log_set_threshold**(3).
diff --git a/doc/libpmemobj/pmemobj_log_set_function.3.md b/doc/libpmemobj/pmemobj_log_set_function.3.md
new file mode 100644
index 00000000000..642c7231a34
--- /dev/null
+++ b/doc/libpmemobj/pmemobj_log_set_function.3.md
@@ -0,0 +1,109 @@
+---
+draft: false
+slider_enable: true
+description: ""
+disclaimer: "The contents of this web site and the associated GitHub repositories are BSD-licensed open source."
+aliases: ["pmemobj_log_set_function.3.html"]
+title: "libpmemobj | PMDK"
+header: "pmemobj API version 2.3"
+---
+
+[comment]: <> (SPDX-License-Identifier: BSD-3-Clause)
+[comment]: <> (Copyright 2024, Intel Corporation)
+
+[comment]: <> (pmemobj_log_set_function.3 -- set the logging function)
+
+[NAME](#name)
+[SYNOPSIS](#synopsis)
+[DESCRIPTION](#description)
+[THE DEFAULT LOGGING FUNCTION](#the-default-logging-function)
+[RETURN VALUE](#return-value)
+[ERRORS](#errors)
+[NOTE](#note)
+[SEE ALSO](#see-also)
+
+# NAME #
+
+**pmemobj_log_set_function**() - set the logging function
+
+# SYNOPSIS #
+
+```c
+ #include
+
+ typedef void pmemobj_log_function(
+ enum pmemobj_log_level level,
+ const char *file_name,
+ const int line_no,
+ const char *function_name,
+ const char *message);
+
+ int pmemobj_log_set_function(pmemobj_log_function *log_function);
+```
+
+# DESCRIPTION #
+
+**pmemobj_log_set_function**() allows choosing the function which will get all
+the generated logging messages. The *log_function* can be either
+**PMEMOBJ_LOG_USE_DEFAULT_FUNCTION** which will use the default logging function
+(built into the library) or a pointer to a user-defined function.
+
+The parameters of a user-defined log function are as follows:
+
+ - *level* - the log level of the message (see **pmemobj_log_set_threshold**(3)
+ for available log levels)
+ - *file_name* - name of the source file where the message is coming from.
+ It could be set to NULL and in such case, neither *line_no* nor *function_name*
+ are provided.
+ - *line_no* - the source file line where the message is coming from
+ - *function_name* - the function name where the message is coming from
+ - *message* - the message string
+
+# THE DEFAULT LOGGING FUNCTION #
+
+The library provides the default logging function which writes messages to
+**syslog**(3) and to **stderr**(3). This function is enabled during library
+initialization and can be restored using **PMEMOBJ_LOG_USE_DEFAULT_FUNCTION** value
+as the *log_function* argument.
+
+The default logging function sinks all the logging messages into **syslog**(3)
+unconditionally. Additionally, it sinks a logging message into **stderr**(3)
+if its logging level is not less severe than indicated by
+the **PMEMOBJ_LOG_THRESHOLD_AUX** threshold's value and it is not of level
+**PMEMOBJ_LOG_LEVEL_HARK**.
+
+Note that the **PMEMOBJ_LOG_THRESHOLD** threshold's value applies to
+the default logging function. Please see the notes below.
+
+# RETURN VALUE #
+
+**pmemobj_log_set_function**() function returns 0 on success or returns
+a non-zero value and sets errno on failure. On failure, the logging
+function remains unchanged.
+
+# ERRORS #
+
+**pmemobj_log_set_function**() can set the following errno values on fail:
+
+ - EAGAIN - multiple threads attempted to change the logging function concurrently.
+ A retry may fix the problem. This error is not expected when the function is
+ called from just one thread at a time.
+
+# NOTE #
+
+The logging messages of level less severe than indicated by
+the **PMEMOBJ_LOG_THRESHOLD** threshold's value won't make it to the logging function
+no matter whether the logging function is the default logging function or user-provided.
+
+The user-defined function must be thread-safe.
+
+The library will call user defined function before returning from **pmemobj_log_set_function**()
+to deliver basic information about the library:
+
+ - "src version: 2.y.z"
+ - "compiled with support for shutdown state"
+ - "compiled with libndctl 63+"
+
+# SEE ALSO #
+
+**pmemobj_log_get_threshold**(3), **pmemobj_log_set_threshold**(3).
diff --git a/doc/libpmemobj/pmemobj_log_set_threshold.3.md b/doc/libpmemobj/pmemobj_log_set_threshold.3.md
new file mode 100644
index 00000000000..d174aa780c8
--- /dev/null
+++ b/doc/libpmemobj/pmemobj_log_set_threshold.3.md
@@ -0,0 +1,104 @@
+---
+draft: false
+slider_enable: true
+description: ""
+disclaimer: "The contents of this web site and the associated GitHub repositories are BSD-licensed open source."
+aliases: ["pmemobj_log_set_threshold.3.html"]
+title: "libpmemobj | PMDK"
+header: "pmemobj API version 2.3"
+---
+
+[comment]: <> (SPDX-License-Identifier: BSD-3-Clause)
+[comment]: <> (Copyright 2024, Intel Corporation)
+
+[comment]: <> (pmemobj_log_set_threshold.3 -- set the logging threshold value)
+
+[NAME](#name)
+[SYNOPSIS](#synopsis)
+[DESCRIPTION](#description)
+[RETURN VALUE](#return-value)
+[ERRORS](#errors)
+[SEE ALSO](#see-also)
+
+# NAME #
+
+**pmemobj_log_set_threshold** - set the logging threshold value
+
+# SYNOPSIS #
+
+```c
+ #include
+
+ enum pmemobj_log_level {
+ PMEMOBJ_LOG_LEVEL_HARK,
+ PMEMOBJ_LOG_LEVEL_FATAL,
+ PMEMOBJ_LOG_LEVEL_ERROR,
+ PMEMOBJ_LOG_LEVEL_WARNING,
+ PMEMOBJ_LOG_LEVEL_NOTICE,
+ PMEMOBJ_LOG_LEVEL_INFO,
+ PMEMOBJ_LOG_LEVEL_DEBUG
+ };
+
+ enum pmemobj_log_threshold {
+ PMEMOBJ_LOG_THRESHOLD,
+ PMEMOBJ_LOG_THRESHOLD_AUX
+ };
+
+ int pmemobj_log_set_threshold(enum pmemobj_log_threshold threshold,
+ enum pmemobj_log_level value);
+```
+
+# DESCRIPTION #
+
+**pmemobj_log_set_threshold**() sets the logging threshold value.
+
+Available thresholds are:
+
+ - **PMEMOBJ_LOG_THRESHOLD** - the main threshold used to filter out undesired
+ logging messages. Messages less severe than indicated by this threshold's
+ value are ignored so they won't make it to the logging function
+ (please see **pmemobj_log_set_function**(3)).
+ The default value is **PMEMOBJ_LOG_WARNING**.
+ - **PMEMOBJ_LOG_THRESHOLD_AUX** - the auxiliary threshold intended for use inside
+ the logging function (please see **pmemobj_log_get_threshold**(3)). A custom
+ logging function may or may not take this threshold into consideration depending
+ on the developer's needs. For the default logging function behaviour please see
+ **pmemobj_log_set_function**(3). The initial value of this threshold is
+ **PMEMOBJ_LOG_LEVEL_HARK**.
+
+Available threshold values are defined by enum *pmemobj_log_level*.
+They are listed in descending order of severity:
+
+ - **PMEMOBJ_LOG_LEVEL_HARK** - only basic library info. Shall be used to
+ effectively suppress the logging since it is used just for a few messages
+ when the program is started and whenever a new logging function is set.
+ Please see **pmemobj_log_set_function**(3).
+ - **PMEMOBJ_LOG_LEVEL_FATAL** - an error that causes the program to stop working
+ immediately. Sorry.
+ - **PMEMOBJ_LOG_LEVEL_ERROR** - an error that causes the current operation or transaction to fail
+ - **PMEMOBJ_LOG_LEVEL_WARNING** - an unexpected situation that does NOT
+ cause the current operation to fail
+ - **PMEMOBJ_LOG_LEVEL_NOTICE** - non-massive info mainly related to public API
+ function completions
+ - **PMEMOBJ_LOG_LEVEL_INFO** - massive info e.g. every write operation indication
+ - **PMEMOBJ_LOG_LEVEL_DEBUG** - debug info e.g. write operation dump
+
+# RETURN VALUE #
+
+**pmemobj_log_set_threshold**() function returns 0 on success or returns
+a non-zero value and sets errno on failure. On failure, the *threshold* value remains unchanged.
+
+# ERRORS #
+
+**pmemobj_log_set_threshold**() can set the following errno values on fail:
+
+ - EINVAL - *threshold* is not **PMEMOBJ_LOG_THRESHOLD** nor
+ **PMEMOBJ_LOG_THRESHOLD_AUX**
+ - EINVAL - *value* is not defined by enum *pmemobj_log_level* type
+ - EAGAIN - multiple threads attempted to change the *threshold* value concurrently.
+ A retry may fix the problem. This error is not expected when the function is
+ called from just one thread at a time.
+
+# SEE ALSO #
+
+**pmemobj_log_get_threshold**(3), **pmemobj_log_set_function**(3).
diff --git a/src/include/libpmemobj/log.h b/src/include/libpmemobj/log.h
index 43c0eaaecfe..caa7abf7d48 100644
--- a/src/include/libpmemobj/log.h
+++ b/src/include/libpmemobj/log.h
@@ -49,105 +49,16 @@ enum pmemobj_log_threshold {
};
/*
- * pmemobj_log_set_threshold - set the logging threshold level
- *
- * SYNOPSIS
- *
- * int pmemobj_log_set_threshold(enum pmemobj_log_threshold threshold,
- * enum pmemobj_log_level level);
- *
- * enum log_level {
- * PMEMOBJ_LOG_LEVEL_HARK,
- * PMEMOBJ_LOG_LEVEL_FATAL,
- * PMEMOBJ_LOG_LEVEL_ERROR,
- * PMEMOBJ_LOG_LEVEL_WARNING,
- * PMEMOBJ_LOG_LEVEL_NOTICE,
- * PMEMOBJ_LOG_LEVEL_INFO,
- * PMEMOBJ_LOG_LEVEL_DEBUG,
- * };
- *
- * enum log_threshold {
- * PMEMOBJ_LOG_THRESHOLD,
- * PMEMOBJ_LOG_THRESHOLD_AUX,
- * PMEMOBJ_LOG_THRESHOLD_MAX
- * };
- *
- * DESCRIPTION
- * pmemobj_log_set_threshold() sets the logging threshold level.
- *
- * Available thresholds are:
- * - PMEMOBJ_LOG_THRESHOLD - the main threshold used to filter out undesired
- * logging messages. Messages on a higher level than the primary threshold
- * level are ignored. PMEMOBJ_LOG_LEVEL_HARK shall be used to suppress
- * logging.
- * The default value is PMEMOBJ_LOG_WARNING.
- * - PMEMOBJ_LOG_THRESHOLD_AUX - the auxiliary threshold intended for use inside
- * the logging function (please see log_get_threshold(3)). The logging
- * function may or may not take this threshold into consideration. The default
- * value is PMEMOBJ_LOG_LEVEL_HARK.
- *
- * Available threshold levels are defined by enum log_level:
- * - PMEMOBJ_LOG_LEVEL_HARK - only basic library info
- * - PMEMOBJ_LOG_LEVEL_FATAL - an error that causes the library to stop working
- * immediately
- * - PMEMOBJ_LOG_LEVEL_ERROR - an error that causes the library to stop working
- * properly
- * - PMEMOBJ_LOG_LEVEL_WARNING - an error that could be handled in the upper
- * level
- * - PMEMOBJ_LOG_LEVEL_NOTICE - non-massive info mainly related to public API
- * function completions
- * - PMEMOBJ_LOG_LEVEL_INFO - massive info e.g. every write operation indication
- * - PMEMOBJ_LOG_LEVEL_DEBUG - debug info e.g. write operation dump
- *
- * THE DEFAULT LOGGING FUNCTION
- * The default logging function writes messages to syslog(3) and to stderr(3),
- * where syslog(3) is the primary destination (PMEMOBJ_LOG_THRESHOLD applies)
- * whereas stderr(3) is the secondary destination (PMEMOBJ_LOG_THRESHOLD_AUX
- * applies).
- *
- * RETURN VALUE
- * pmemobj_log_set_threshold() function returns 0 on success or returns
- * a non-zero value and sets errno on failure.
- *
- * ERRORS
- * pmemobj_log_set_threshold() can set the following errno values on fail:
- * - EINVAL - threshold is not PMEMOBJ_LOG_THRESHOLD nor
- * PMEMOBJ_LOG_THRESHOLD_AUX
- * - EINVAL - level is not a value defined by enum log_level type
- * - EAGAIN - a temporary error occurred, the retry may fix the problem
- *
- * SEE ALSO
- * pmemobj_log_get_threshold(3), pmemobj_log_set_function(3).
+ * pmemobj_log_set_threshold - set the logging threshold value
*/
int pmemobj_log_set_threshold(enum pmemobj_log_threshold threshold,
- enum pmemobj_log_level level);
+ enum pmemobj_log_level value);
/*
- * pmemobj_log_get_threshold - get the logging threshold level
- *
- * SYNOPSIS
- *
- * int pmemobj_log_get_threshold(enum pmemobj_log_threshold threshold,
- * enum pmemobj_log_level *level);
- *
- * DESCRIPTION
- * pmemobj_log_get_threshold() gets the current level of the threshold.
- * See pmemobj_log_set_threshold(3) for available thresholds and levels.
- *
- * RETURN VALUE
- * pmemobj_log_get_threshold() function returns 0 on success or returns
- * a non-zero value and sets errno on failure.
- *
- * ERRORS
- * pmemobj_log_get_threshold() can fail with the following errors:
- * - EINVAL - threshold is not CORE_LOG_THRESHOLD nor CORE_LOG_THRESHOLD_AUX
- * - EINVAL - *level is NULL
- *
- * SEE ALSO
- * pmemobj_log_set_function(3), pmemobj_log_set_threshold(3).
+ * pmemobj_log_get_threshold - get the logging threshold value
*/
int pmemobj_log_get_threshold(enum pmemobj_log_threshold threshold,
- enum pmemobj_log_level *level);
+ enum pmemobj_log_level *value);
/*
* the type used for defining logging functions
@@ -170,55 +81,6 @@ typedef void pmemobj_log_function(
/*
* pmemobj_log_set_function - set the logging function
- *
- * SYNOPSIS
- *
- * typedef void pmemobj_log_function(
- * enum pmemobj_log_level level,
- * const char *file_name,
- * const int line_no,
- * const char *function_name,
- * const char *message_format,
- * ...);
- *
- * int pmemobj_log_set_function(pmemobj_log_function *log_function);
- *
- * DESCRIPTION
- * pmemobj_log_set_function() allows choosing the function which will get all
- * the generated logging messages. The log_function can be either
- * PMEMOBJ_LOG_USE_DEFAULT_FUNCTION which will use the default logging function
- * (built into the library) or a pointer to a user-defined function.
- *
- * Parameters of a user-defined log function are as follow:
- * - level - the log level of the message
- * - file_name - name of the source file where the message coming from. It could
- * be set to NULL and
- * in such case neither line_no nor function_name are provided.
- * - line_no - the source file line where the message coming from
- * - function_name - the function name where the message coming from
- * - message_format - printf(3)-like format string of the message
- * - "..." - additional arguments of the message format string
- *
- * THE DEFAULT LOGGING FUNCTION
- * The initial value of the logging function is CORE_LOG_USE_DEFAULT_FUNCTION.
- * This function writes messages to syslog(3) (the primary destination) and to
- * stderr(3) (the secondary destination).
- *
- * RETURN VALUE
- * pmemobj_log_set_function() function returns 0 on success or returns
- * a non-zero value and sets errno on failure.
- *
- * ERRORS
- * - EAGAIN - a temporary error occurred, the retry may fix the problem
- *
- * NOTE
- * The logging messages on the levels above the CORE_LOG_THRESHOLD level won't
- * trigger the logging function.
- *
- * The user defined function must be thread-safe.
- *
- * SEE ALSO
- * pmemobj_log_get_threshold(3), pmemobj_log_set_threshold(3).
*/
int pmemobj_log_set_function(pmemobj_log_function *log_function);