Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
S
spdlog
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
spdlog
Commits
c09dee77
Commit
c09dee77
authored
Jun 13, 2019
by
gabime
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Moved source filename shortening to pattern formatter instead of macro
parent
35228131
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
86 additions
and
18 deletions
+86
-18
formatter-bench.cpp
bench/formatter-bench.cpp
+3
-2
common.h
include/spdlog/common.h
+0
-13
pattern_formatter-inl.h
include/spdlog/details/pattern_formatter-inl.h
+33
-2
spdlog.h
include/spdlog/spdlog.h
+1
-1
test_pattern_formatter.cpp
tests/test_pattern_formatter.cpp
+49
-0
No files found.
bench/formatter-bench.cpp
View file @
c09dee77
...
...
@@ -15,7 +15,8 @@ void bench_formatter(benchmark::State &state, std::string pattern)
std
::
string
logger_name
=
"logger-name"
;
const
char
*
text
=
"Hello. This is some message with length of 80 "
;
spdlog
::
details
::
log_msg
msg
(
logger_name
,
spdlog
::
level
::
info
,
text
);
spdlog
::
source_loc
source_loc
{
"a/b/c/d/myfile.cpp"
,
123
,
"some_func()"
};
spdlog
::
details
::
log_msg
msg
(
source_loc
,
logger_name
,
spdlog
::
level
::
info
,
text
);
for
(
auto
_
:
state
)
{
...
...
@@ -28,7 +29,7 @@ void bench_formatter(benchmark::State &state, std::string pattern)
void
bench_formatters
()
{
// basic patterns(single flag)
std
::
string
all_flags
=
"+vtPnlLaAbBcCYDmdHIMSefFprRTXzEi%"
;
std
::
string
all_flags
=
"+vtPnlLaAbBcCYDmdHIMSefFprRTXzEi
sg@l
%"
;
std
::
vector
<
std
::
string
>
basic_patterns
;
for
(
auto
&
flag
:
all_flags
)
{
...
...
include/spdlog/common.h
View file @
c09dee77
...
...
@@ -53,19 +53,6 @@
#endif
#endif
// Get the basename of __FILE__ (at compile time if possible)
#if FMT_HAS_FEATURE(__builtin_strrchr)
#define SPDLOG_STRRCHR(str, sep) __builtin_strrchr(str, sep)
#else
#define SPDLOG_STRRCHR(str, sep) strrchr(str, sep)
#endif //__builtin_strrchr not defined
#ifdef _WIN32
#define SPDLOG_FILE_BASENAME(file) SPDLOG_STRRCHR("\\" file, '\\') + 1
#else
#define SPDLOG_FILE_BASENAME(file) SPDLOG_STRRCHR("/" file, '/') + 1
#endif
#ifndef SPDLOG_FUNCTION
#define SPDLOG_FUNCTION __FUNCTION__
#endif
...
...
include/spdlog/details/pattern_formatter-inl.h
View file @
c09dee77
...
...
@@ -17,6 +17,7 @@
#include <chrono>
#include <ctime>
#include <cctype>
#include <cstring>
#include <memory>
#include <mutex>
#include <string>
...
...
@@ -820,6 +821,31 @@ public:
}
};
class
short_filename_formatter
final
:
public
flag_formatter
{
public
:
explicit
short_filename_formatter
(
padding_info
padinfo
)
:
flag_formatter
(
padinfo
)
{}
static
const
char
*
basename
(
const
char
*
filename
)
{
const
char
*
rv
=
std
::
strrchr
(
filename
,
os
::
folder_sep
);
return
rv
!=
nullptr
?
rv
+
1
:
filename
;
}
void
format
(
const
details
::
log_msg
&
msg
,
const
std
::
tm
&
,
fmt
::
memory_buffer
&
dest
)
override
{
if
(
msg
.
source
.
empty
())
{
return
;
}
auto
filename
=
basename
(
msg
.
source
.
filename
);
scoped_pad
p
(
filename
,
padinfo_
,
dest
);
fmt_helper
::
append_string_view
(
filename
,
dest
);
}
};
class
source_linenum_formatter
final
:
public
flag_formatter
{
public
:
...
...
@@ -944,7 +970,8 @@ public:
if
(
!
msg
.
source
.
empty
())
{
dest
.
push_back
(
'['
);
fmt_helper
::
append_string_view
(
msg
.
source
.
filename
,
dest
);
const
char
*
filename
=
details
::
short_filename_formatter
::
basename
(
msg
.
source
.
filename
);
fmt_helper
::
append_string_view
(
filename
,
dest
);
dest
.
push_back
(
':'
);
fmt_helper
::
append_int
(
msg
.
source
.
line
,
dest
);
dest
.
push_back
(
']'
);
...
...
@@ -1154,7 +1181,11 @@ SPDLOG_INLINE void pattern_formatter::handle_flag_(char flag, details::padding_i
formatters_
.
push_back
(
details
::
make_unique
<
details
::
source_location_formatter
>
(
padding
));
break
;
case
(
's'
):
// source filename
case
(
's'
):
// short source filename - without directory name
formatters_
.
push_back
(
details
::
make_unique
<
details
::
short_filename_formatter
>
(
padding
));
break
;
case
(
'g'
):
// full source filename
formatters_
.
push_back
(
details
::
make_unique
<
details
::
source_filename_formatter
>
(
padding
));
break
;
...
...
include/spdlog/spdlog.h
View file @
c09dee77
...
...
@@ -267,7 +267,7 @@ inline void critical(const wchar_t *fmt, const Args &... args)
do \
{ \
if (logger->should_log(level)) \
logger->log(spdlog::source_loc{
SPDLOG_FILE_BASENAME(__FILE__)
, __LINE__, SPDLOG_FUNCTION}, level, __VA_ARGS__); \
logger->log(spdlog::source_loc{
__FILE__
, __LINE__, SPDLOG_FUNCTION}, level, __VA_ARGS__); \
} while (0)
#if SPDLOG_ACTIVE_LEVEL <= SPDLOG_LEVEL_TRACE
...
...
tests/test_pattern_formatter.cpp
View file @
c09dee77
...
...
@@ -253,3 +253,52 @@ TEST_CASE("clone-formatter-2", "[pattern_formatter]")
formatter_2
->
format
(
msg
,
formatted_2
);
REQUIRE
(
fmt
::
to_string
(
formatted_1
)
==
fmt
::
to_string
(
formatted_2
));
}
//
// Test source location formatting
//
TEST_CASE
(
"short filename formatter-1"
,
"[pattern_formatter]"
)
{
spdlog
::
pattern_formatter
formatter
(
"%s"
,
spdlog
::
pattern_time_type
::
local
,
""
);
fmt
::
memory_buffer
formatted
;
std
::
string
logger_name
=
"logger-name"
;
spdlog
::
source_loc
source_loc
{
"/a/b/c/d/myfile.cpp"
,
123
,
"some_func()"
};
spdlog
::
details
::
log_msg
msg
(
source_loc
,
"logger-name"
,
spdlog
::
level
::
info
,
"Hello"
);
formatter
.
format
(
msg
,
formatted
);
REQUIRE
(
fmt
::
to_string
(
formatted
)
==
"myfile.cpp"
);
}
TEST_CASE
(
"short filename formatter-2"
,
"[pattern_formatter]"
)
{
spdlog
::
pattern_formatter
formatter
(
"%s:%#"
,
spdlog
::
pattern_time_type
::
local
,
""
);
fmt
::
memory_buffer
formatted
;
std
::
string
logger_name
=
"logger-name"
;
spdlog
::
source_loc
source_loc
{
"myfile.cpp"
,
123
,
"some_func()"
};
spdlog
::
details
::
log_msg
msg
(
source_loc
,
"logger-name"
,
spdlog
::
level
::
info
,
"Hello"
);
formatter
.
format
(
msg
,
formatted
);
REQUIRE
(
fmt
::
to_string
(
formatted
)
==
"myfile.cpp:123"
);
}
TEST_CASE
(
"short filename formatter-3"
,
"[pattern_formatter]"
)
{
spdlog
::
pattern_formatter
formatter
(
"%s %v"
,
spdlog
::
pattern_time_type
::
local
,
""
);
fmt
::
memory_buffer
formatted
;
std
::
string
logger_name
=
"logger-name"
;
spdlog
::
source_loc
source_loc
{
""
,
123
,
"some_func()"
};
spdlog
::
details
::
log_msg
msg
(
source_loc
,
"logger-name"
,
spdlog
::
level
::
info
,
"Hello"
);
formatter
.
format
(
msg
,
formatted
);
REQUIRE
(
fmt
::
to_string
(
formatted
)
==
" Hello"
);
}
TEST_CASE
(
"full filename formatter"
,
"[pattern_formatter]"
)
{
spdlog
::
pattern_formatter
formatter
(
"%g:%#"
,
spdlog
::
pattern_time_type
::
local
,
""
);
fmt
::
memory_buffer
formatted
;
std
::
string
logger_name
=
"logger-name"
;
spdlog
::
source_loc
source_loc
{
"/a/b/c/d/myfile.cpp"
,
123
,
"some_func()"
};
spdlog
::
details
::
log_msg
msg
(
source_loc
,
"logger-name"
,
spdlog
::
level
::
info
,
"Hello"
);
formatter
.
format
(
msg
,
formatted
);
REQUIRE
(
fmt
::
to_string
(
formatted
)
==
"/a/b/c/d/myfile.cpp:123"
);
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment