6#include <userver/compiler/impl/constexpr.hpp>
7#include <userver/utils/string_literal.hpp>
8#include <userver/utils/zstring_view.hpp>
10USERVER_NAMESPACE_BEGIN
12#if !defined(USERVER_LOG_PREFIX_PATH_BASE) && !defined(USERVER_LOG_SOURCE_PATH_BASE) &&
13 !defined(USERVER_LOG_BUILD_PATH_BASE)
21#define USERVER_FILEPATH
22 USERVER_NAMESPACE
::utils::zstring_view { __builtin_FILE() }
26namespace logging::impl {
30#define USERVER_LOG_FILEPATH_STRINGIZE_AUX(X) #X
32#define USERVER_LOG_FILEPATH_STRINGIZE(X) USERVER_LOG_FILEPATH_STRINGIZE_AUX(X)
35static constexpr std::size_t PathBaseSize(utils::zstring_view path)
noexcept {
36 constexpr utils::StringLiteral kSourcePathPrefixes[] = {
37#ifdef USERVER_LOG_PREFIX_PATH_BASE
38 USERVER_LOG_FILEPATH_STRINGIZE(USERVER_LOG_PREFIX_PATH_BASE),
40#ifdef USERVER_LOG_SOURCE_PATH_BASE
41 USERVER_LOG_FILEPATH_STRINGIZE(USERVER_LOG_SOURCE_PATH_BASE),
43#ifdef USERVER_LOG_BUILD_PATH_BASE
44 USERVER_LOG_FILEPATH_STRINGIZE(USERVER_LOG_BUILD_PATH_BASE),
48 for (
const utils::StringLiteral base : kSourcePathPrefixes) {
49 if (path.substr(0, base.size()) == base) {
50 std::size_t base_size = path.find_first_not_of(
'/', base.size());
51 if (base_size == std::string_view::npos) {
52 base_size = path.size();
63static constexpr utils::zstring_view CutFilePath(utils::zstring_view path_view)
noexcept {
64 path_view.remove_prefix(impl::PathBaseSize(path_view));
68#undef USERVER_LOG_FILEPATH_STRINGIZE
69#undef USERVER_LOG_FILEPATH_STRINGIZE_AUX
74#define USERVER_FILEPATH USERVER_NAMESPACE::logging::impl::CutFilePath(__builtin_FILE())