Conversation
|
Thanks. To add this fully means duplicating all of this for all levels (trace(), debug(), warn(), error(), critical()) in spdlog.h AND in logger.h class declarations. We need to find a way to achieve this without bloating the code. Not sure how.. |
… in the std library used. Implementation extended to all logging levels.
Readded the possibility of using spdlog::info(123).
|
I have now extended the implementation to all the other logging levels and managed to reintroduce support for code like |
Added overloading for std::source_location in logger class.
|
Hello all, // common.h
template<typename T>
struct format_string_wrapper
{
format_string_wrapper(const char* fs, spdlog::details::source_location loc = spdlog::details::source_location::current())
: format_string_{fs}
, loc_{loc}
{}
operator T()
{
return format_string_;
}
T format_string_;
spdlog::details::source_location loc_;
};
template<typename... Args>
using format_string_t = format_string_wrapper<fmt::format_string<Args...>>;
//logger.h
template<typename... Args>
void log(source_loc loc, level::level_enum lvl, format_string_t<Args...> fmt, Args &&... args)
{
log_(loc, lvl, details::to_string_view(fmt.format_string_), std::forward<Args>(args)...);
} |
|
Just wanted to second the approach @mguludag posted — I've been using something similar for a few years in various codebases at work. I actually found this pull request when searching around to see if anyone else had come up with this idea. I have a very basic implementation here that I've used for some personal projects. Unfortunately a defaulted An alternate approach is a "double call" syntax, something like |
I implemented source_location into spdlog but I removed extra default source_location parameters from spdlog's templated non format_str log functions. Using log functions with format_string the source_location feature works fine. |
It would be great to have support for std::source_location without using the macro version when compiling for C++ 20 (related issue at #1823).
I drafted an idea on how to implement that.
The only issue with this implementation is that it would introduce a small breaking change:
spdlog::info(1)would not compile anymore. However, that does not work with fmt anyway.