Usage of -fvisibility=hidden is the recommended default for DSO's.
If the spdlog build is for a shared library, then API symbols have
SPDLOG_API marking on them, and cause the symbol to be exported, with
other symbols now hidden by default.
If the build is for a static library with position-independent code, then
spdlog is to be embedded as implementation detail in another shared
library or executable. In that case we don't want to export any symbol.
Conveniently, SPDLPG_API in that case resolves to nothing, so with the
default of hidden all symbols are made hidden.
* Added a function to add callbacks that are called when a logger is registered
* Fix non captured registration 2 not being properly tested for
* Replace std::list by std::vector
* Remove const refs to shared pointers
* Fix missing header
Reason for the discard_new policy: when there is an overflow, there
is usually some unexpected issue (a bug, or some other unexpected stuff).
And in case of unexpected issue, the first arrived log messages are usually
more important than subsequent ones. For example, some application
keep logging error messages in case of functionality failure, which,
when using async_overflow_policy::overrun_oldest, will overrun the
first arrived messages that may contain real reason for the failure.
You can use SPDLOG_VERSION to select the latest spdlog features
where available while falling back to older implementations otherwise.
Using SPDLOG_TO_VERSION() for the value to compare with is recommended.
for Example:
```c++
void sink_it_(const details::log_msg &msg) override
{
#if SPDLOG_VERSION < SPDLOG_TO_VERSION(1,4,0)
fmt::memory_buffer formatted;
#else
memory_buf_t formatted;
#endif
sinks::base_sink<Mutex>::formatter_->format(msg, formatted);
// bala bala...
}
```
Android logger (since API 30) checks the per-tag property `log.tag.<tag>` to determine if a log message is loggable. See https://developer.android.com/ndk/reference/group/logging#__android_log_is_loggable . For example, `__android_log_buf_write` for a VERBOSE message will call `__android_log_is_loggable` and return `-EPERM` if the log message will not be printed because `log.tag.<tag>` is set to `INFO`.
Instead of erroring with the following error message, the Android sink should handle `-EPERM`. It is not an error to disable a log via the run-time property.
```
[*** LOG ERROR #0001 ***] [2023-06-29 00:50:26] [logcat] logging to Android failed: Unknown error -1 [/path/to/file.cpp(123)]
```