Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
spdlog
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
spdlog
Commits
54456aee
Commit
54456aee
authored
Jul 15, 2019
by
gabime
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Refactored padding handling in formatter using templates
parent
2a31cdcd
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
170 additions
and
187 deletions
+170
-187
include/spdlog/details/pattern_formatter-inl.h
include/spdlog/details/pattern_formatter-inl.h
+169
-187
include/spdlog/details/pattern_formatter.h
include/spdlog/details/pattern_formatter.h
+1
-0
No files found.
include/spdlog/details/pattern_formatter-inl.h
View file @
54456aee
...
@@ -32,10 +32,10 @@ namespace details {
...
@@ -32,10 +32,10 @@ namespace details {
// name & level pattern appender
// name & level pattern appender
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
class
scoped_pad
class
scoped_pad
der
{
{
public:
public:
scoped_pad
(
size_t
wrapped_size
,
const
padding_info
&
padinfo
,
fmt
::
memory_buffer
&
dest
)
scoped_pad
der
(
size_t
wrapped_size
,
const
padding_info
&
padinfo
,
fmt
::
memory_buffer
&
dest
)
:
padinfo_
(
padinfo
)
:
padinfo_
(
padinfo
)
,
dest_
(
dest
)
,
dest_
(
dest
)
{
{
...
@@ -60,12 +60,8 @@ public:
...
@@ -60,12 +60,8 @@ public:
total_pad_
=
half_pad
+
reminder
;
// for the right side
total_pad_
=
half_pad
+
reminder
;
// for the right side
}
}
}
}
scoped_pad
(
const
spdlog
::
string_view_t
&
txt
,
padding_info
&
padinfo
,
fmt
::
memory_buffer
&
dest
)
~
scoped_padder
()
:
scoped_pad
(
txt
.
size
(),
padinfo
,
dest
)
{}
~
scoped_pad
()
{
{
if
(
total_pad_
)
if
(
total_pad_
)
{
{
...
@@ -87,6 +83,13 @@ private:
...
@@ -87,6 +83,13 @@ private:
string_view_t
spaces_
{
" "
,
64
};
string_view_t
spaces_
{
" "
,
64
};
};
};
struct
null_scoped_padder
{
null_scoped_padder
(
size_t
/*wrapped_size*/
,
const
padding_info
&
/*padinfo*/
,
fmt
::
memory_buffer
&
/*dest*/
)
{}
};
template
<
typename
ScopedPadder
>
class
name_formatter
:
public
flag_formatter
class
name_formatter
:
public
flag_formatter
{
{
public:
public:
...
@@ -96,19 +99,13 @@ public:
...
@@ -96,19 +99,13 @@ public:
void
format
(
const
details
::
log_msg
&
msg
,
const
std
::
tm
&
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
msg
,
const
std
::
tm
&
,
fmt
::
memory_buffer
&
dest
)
override
{
{
if
(
padinfo_
.
enabled
())
ScopedPadder
p
(
msg
.
logger_name
.
size
(),
padinfo_
,
dest
);
{
fmt_helper
::
append_string_view
(
msg
.
logger_name
,
dest
);
scoped_pad
p
(
msg
.
logger_name
,
padinfo_
,
dest
);
fmt_helper
::
append_string_view
(
msg
.
logger_name
,
dest
);
}
else
{
fmt_helper
::
append_string_view
(
msg
.
logger_name
,
dest
);
}
}
}
};
};
// log level appender
// log level appender
template
<
typename
ScopedPadder
>
class
level_formatter
:
public
flag_formatter
class
level_formatter
:
public
flag_formatter
{
{
public:
public:
...
@@ -119,19 +116,13 @@ public:
...
@@ -119,19 +116,13 @@ public:
void
format
(
const
details
::
log_msg
&
msg
,
const
std
::
tm
&
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
msg
,
const
std
::
tm
&
,
fmt
::
memory_buffer
&
dest
)
override
{
{
string_view_t
&
level_name
=
level
::
to_string_view
(
msg
.
level
);
string_view_t
&
level_name
=
level
::
to_string_view
(
msg
.
level
);
if
(
padinfo_
.
enabled
())
ScopedPadder
p
(
level_name
.
size
(),
padinfo_
,
dest
);
{
fmt_helper
::
append_string_view
(
level_name
,
dest
);
scoped_pad
p
(
level_name
,
padinfo_
,
dest
);
fmt_helper
::
append_string_view
(
level_name
,
dest
);
}
else
{
fmt_helper
::
append_string_view
(
level_name
,
dest
);
}
}
}
};
};
// short log level appender
// short log level appender
template
<
typename
ScopedPadder
>
class
short_level_formatter
:
public
flag_formatter
class
short_level_formatter
:
public
flag_formatter
{
{
public:
public:
...
@@ -142,7 +133,7 @@ public:
...
@@ -142,7 +133,7 @@ public:
void
format
(
const
details
::
log_msg
&
msg
,
const
std
::
tm
&
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
msg
,
const
std
::
tm
&
,
fmt
::
memory_buffer
&
dest
)
override
{
{
string_view_t
level_name
{
level
::
to_short_c_str
(
msg
.
level
)};
string_view_t
level_name
{
level
::
to_short_c_str
(
msg
.
level
)};
scoped_pad
p
(
level_name
,
padinfo_
,
dest
);
ScopedPadder
p
(
level_name
.
size
()
,
padinfo_
,
dest
);
fmt_helper
::
append_string_view
(
level_name
,
dest
);
fmt_helper
::
append_string_view
(
level_name
,
dest
);
}
}
};
};
...
@@ -163,6 +154,8 @@ static int to12h(const tm &t)
...
@@ -163,6 +154,8 @@ static int to12h(const tm &t)
// Abbreviated weekday name
// Abbreviated weekday name
static
std
::
array
<
const
char
*
,
7
>
days
{
"Sun"
,
"Mon"
,
"Tue"
,
"Wed"
,
"Thu"
,
"Fri"
,
"Sat"
};
static
std
::
array
<
const
char
*
,
7
>
days
{
"Sun"
,
"Mon"
,
"Tue"
,
"Wed"
,
"Thu"
,
"Fri"
,
"Sat"
};
template
<
typename
ScopedPadder
>
class
a_formatter
:
public
flag_formatter
class
a_formatter
:
public
flag_formatter
{
{
public:
public:
...
@@ -173,13 +166,15 @@ public:
...
@@ -173,13 +166,15 @@ public:
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
{
{
string_view_t
field_value
{
days
[
static_cast
<
size_t
>
(
tm_time
.
tm_wday
)]};
string_view_t
field_value
{
days
[
static_cast
<
size_t
>
(
tm_time
.
tm_wday
)]};
scoped_pad
p
(
field_value
,
padinfo_
,
dest
);
ScopedPadder
p
(
field_value
.
size
()
,
padinfo_
,
dest
);
fmt_helper
::
append_string_view
(
field_value
,
dest
);
fmt_helper
::
append_string_view
(
field_value
,
dest
);
}
}
};
};
// Full weekday name
// Full weekday name
static
std
::
array
<
const
char
*
,
7
>
full_days
{
"Sunday"
,
"Monday"
,
"Tuesday"
,
"Wednesday"
,
"Thursday"
,
"Friday"
,
"Saturday"
};
static
std
::
array
<
const
char
*
,
7
>
full_days
{
"Sunday"
,
"Monday"
,
"Tuesday"
,
"Wednesday"
,
"Thursday"
,
"Friday"
,
"Saturday"
};
template
<
typename
ScopedPadder
>
class
A_formatter
:
public
flag_formatter
class
A_formatter
:
public
flag_formatter
{
{
public:
public:
...
@@ -190,13 +185,15 @@ public:
...
@@ -190,13 +185,15 @@ public:
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
{
{
string_view_t
field_value
{
full_days
[
static_cast
<
size_t
>
(
tm_time
.
tm_wday
)]};
string_view_t
field_value
{
full_days
[
static_cast
<
size_t
>
(
tm_time
.
tm_wday
)]};
scoped_pad
p
(
field_value
,
padinfo_
,
dest
);
ScopedPadder
p
(
field_value
.
size
()
,
padinfo_
,
dest
);
fmt_helper
::
append_string_view
(
field_value
,
dest
);
fmt_helper
::
append_string_view
(
field_value
,
dest
);
}
}
};
};
// Abbreviated month
// Abbreviated month
static
const
std
::
array
<
const
char
*
,
12
>
months
{
"Jan"
,
"Feb"
,
"Mar"
,
"Apr"
,
"May"
,
"Jun"
,
"Jul"
,
"Aug"
,
"Sept"
,
"Oct"
,
"Nov"
,
"Dec"
};
static
const
std
::
array
<
const
char
*
,
12
>
months
{
"Jan"
,
"Feb"
,
"Mar"
,
"Apr"
,
"May"
,
"Jun"
,
"Jul"
,
"Aug"
,
"Sept"
,
"Oct"
,
"Nov"
,
"Dec"
};
template
<
typename
ScopedPadder
>
class
b_formatter
:
public
flag_formatter
class
b_formatter
:
public
flag_formatter
{
{
public:
public:
...
@@ -207,7 +204,7 @@ public:
...
@@ -207,7 +204,7 @@ public:
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
{
{
string_view_t
field_value
{
months
[
static_cast
<
size_t
>
(
tm_time
.
tm_mon
)]};
string_view_t
field_value
{
months
[
static_cast
<
size_t
>
(
tm_time
.
tm_mon
)]};
scoped_pad
p
(
field_value
,
padinfo_
,
dest
);
ScopedPadder
p
(
field_value
.
size
()
,
padinfo_
,
dest
);
fmt_helper
::
append_string_view
(
field_value
,
dest
);
fmt_helper
::
append_string_view
(
field_value
,
dest
);
}
}
};
};
...
@@ -216,6 +213,7 @@ public:
...
@@ -216,6 +213,7 @@ public:
static
const
std
::
array
<
const
char
*
,
12
>
full_months
{
static
const
std
::
array
<
const
char
*
,
12
>
full_months
{
"January"
,
"February"
,
"March"
,
"April"
,
"May"
,
"June"
,
"July"
,
"August"
,
"September"
,
"October"
,
"November"
,
"December"
};
"January"
,
"February"
,
"March"
,
"April"
,
"May"
,
"June"
,
"July"
,
"August"
,
"September"
,
"October"
,
"November"
,
"December"
};
template
<
typename
ScopedPadder
>
class
B_formatter
:
public
flag_formatter
class
B_formatter
:
public
flag_formatter
{
{
public:
public:
...
@@ -226,12 +224,13 @@ public:
...
@@ -226,12 +224,13 @@ public:
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
{
{
string_view_t
field_value
{
full_months
[
static_cast
<
size_t
>
(
tm_time
.
tm_mon
)]};
string_view_t
field_value
{
full_months
[
static_cast
<
size_t
>
(
tm_time
.
tm_mon
)]};
scoped_pad
p
(
field_value
,
padinfo_
,
dest
);
ScopedPadder
p
(
field_value
.
size
()
,
padinfo_
,
dest
);
fmt_helper
::
append_string_view
(
field_value
,
dest
);
fmt_helper
::
append_string_view
(
field_value
,
dest
);
}
}
};
};
// Date and time representation (Thu Aug 23 15:35:46 2014)
// Date and time representation (Thu Aug 23 15:35:46 2014)
template
<
typename
ScopedPadder
>
class
c_formatter
final
:
public
flag_formatter
class
c_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -242,7 +241,7 @@ public:
...
@@ -242,7 +241,7 @@ public:
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
{
{
const
size_t
field_size
=
24
;
const
size_t
field_size
=
24
;
scoped_pad
p
(
field_size
,
padinfo_
,
dest
);
ScopedPadder
p
(
field_size
,
padinfo_
,
dest
);
fmt_helper
::
append_string_view
(
days
[
static_cast
<
size_t
>
(
tm_time
.
tm_wday
)],
dest
);
fmt_helper
::
append_string_view
(
days
[
static_cast
<
size_t
>
(
tm_time
.
tm_wday
)],
dest
);
dest
.
push_back
(
' '
);
dest
.
push_back
(
' '
);
...
@@ -263,6 +262,7 @@ public:
...
@@ -263,6 +262,7 @@ public:
};
};
// year - 2 digit
// year - 2 digit
template
<
typename
ScopedPadder
>
class
C_formatter
final
:
public
flag_formatter
class
C_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -273,12 +273,13 @@ public:
...
@@ -273,12 +273,13 @@ public:
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
{
{
const
size_t
field_size
=
2
;
const
size_t
field_size
=
2
;
scoped_pad
p
(
field_size
,
padinfo_
,
dest
);
ScopedPadder
p
(
field_size
,
padinfo_
,
dest
);
fmt_helper
::
pad2
(
tm_time
.
tm_year
%
100
,
dest
);
fmt_helper
::
pad2
(
tm_time
.
tm_year
%
100
,
dest
);
}
}
};
};
// Short MM/DD/YY date, equivalent to %m/%d/%y 08/23/01
// Short MM/DD/YY date, equivalent to %m/%d/%y 08/23/01
template
<
typename
ScopedPadder
>
class
D_formatter
final
:
public
flag_formatter
class
D_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -289,7 +290,7 @@ public:
...
@@ -289,7 +290,7 @@ public:
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
{
{
const
size_t
field_size
=
10
;
const
size_t
field_size
=
10
;
scoped_pad
p
(
field_size
,
padinfo_
,
dest
);
ScopedPadder
p
(
field_size
,
padinfo_
,
dest
);
fmt_helper
::
pad2
(
tm_time
.
tm_mon
+
1
,
dest
);
fmt_helper
::
pad2
(
tm_time
.
tm_mon
+
1
,
dest
);
dest
.
push_back
(
'/'
);
dest
.
push_back
(
'/'
);
...
@@ -300,6 +301,7 @@ public:
...
@@ -300,6 +301,7 @@ public:
};
};
// year - 4 digit
// year - 4 digit
template
<
typename
ScopedPadder
>
class
Y_formatter
final
:
public
flag_formatter
class
Y_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -310,12 +312,13 @@ public:
...
@@ -310,12 +312,13 @@ public:
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
{
{
const
size_t
field_size
=
4
;
const
size_t
field_size
=
4
;
scoped_pad
p
(
field_size
,
padinfo_
,
dest
);
ScopedPadder
p
(
field_size
,
padinfo_
,
dest
);
fmt_helper
::
append_int
(
tm_time
.
tm_year
+
1900
,
dest
);
fmt_helper
::
append_int
(
tm_time
.
tm_year
+
1900
,
dest
);
}
}
};
};
// month 1-12
// month 1-12
template
<
typename
ScopedPadder
>
class
m_formatter
final
:
public
flag_formatter
class
m_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -326,12 +329,13 @@ public:
...
@@ -326,12 +329,13 @@ public:
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
{
{
const
size_t
field_size
=
2
;
const
size_t
field_size
=
2
;
scoped_pad
p
(
field_size
,
padinfo_
,
dest
);
ScopedPadder
p
(
field_size
,
padinfo_
,
dest
);
fmt_helper
::
pad2
(
tm_time
.
tm_mon
+
1
,
dest
);
fmt_helper
::
pad2
(
tm_time
.
tm_mon
+
1
,
dest
);
}
}
};
};
// day of month 1-31
// day of month 1-31
template
<
typename
ScopedPadder
>
class
d_formatter
final
:
public
flag_formatter
class
d_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -342,12 +346,13 @@ public:
...
@@ -342,12 +346,13 @@ public:
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
{
{
const
size_t
field_size
=
2
;
const
size_t
field_size
=
2
;
scoped_pad
p
(
field_size
,
padinfo_
,
dest
);
ScopedPadder
p
(
field_size
,
padinfo_
,
dest
);
fmt_helper
::
pad2
(
tm_time
.
tm_mday
,
dest
);
fmt_helper
::
pad2
(
tm_time
.
tm_mday
,
dest
);
}
}
};
};
// hours in 24 format 0-23
// hours in 24 format 0-23
template
<
typename
ScopedPadder
>
class
H_formatter
final
:
public
flag_formatter
class
H_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -358,12 +363,13 @@ public:
...
@@ -358,12 +363,13 @@ public:
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
{
{
const
size_t
field_size
=
2
;
const
size_t
field_size
=
2
;
scoped_pad
p
(
field_size
,
padinfo_
,
dest
);
ScopedPadder
p
(
field_size
,
padinfo_
,
dest
);
fmt_helper
::
pad2
(
tm_time
.
tm_hour
,
dest
);
fmt_helper
::
pad2
(
tm_time
.
tm_hour
,
dest
);
}
}
};
};
// hours in 12 format 1-12
// hours in 12 format 1-12
template
<
typename
ScopedPadder
>
class
I_formatter
final
:
public
flag_formatter
class
I_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -374,12 +380,13 @@ public:
...
@@ -374,12 +380,13 @@ public:
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
{
{
const
size_t
field_size
=
2
;
const
size_t
field_size
=
2
;
scoped_pad
p
(
field_size
,
padinfo_
,
dest
);
ScopedPadder
p
(
field_size
,
padinfo_
,
dest
);
fmt_helper
::
pad2
(
to12h
(
tm_time
),
dest
);
fmt_helper
::
pad2
(
to12h
(
tm_time
),
dest
);
}
}
};
};
// minutes 0-59
// minutes 0-59
template
<
typename
ScopedPadder
>
class
M_formatter
final
:
public
flag_formatter
class
M_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -390,12 +397,13 @@ public:
...
@@ -390,12 +397,13 @@ public:
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
{
{
const
size_t
field_size
=
2
;
const
size_t
field_size
=
2
;
scoped_pad
p
(
field_size
,
padinfo_
,
dest
);
ScopedPadder
p
(
field_size
,
padinfo_
,
dest
);
fmt_helper
::
pad2
(
tm_time
.
tm_min
,
dest
);
fmt_helper
::
pad2
(
tm_time
.
tm_min
,
dest
);
}
}
};
};
// seconds 0-59
// seconds 0-59
template
<
typename
ScopedPadder
>
class
S_formatter
final
:
public
flag_formatter
class
S_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -406,12 +414,13 @@ public:
...
@@ -406,12 +414,13 @@ public:
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
{
{
const
size_t
field_size
=
2
;
const
size_t
field_size
=
2
;
scoped_pad
p
(
field_size
,
padinfo_
,
dest
);
ScopedPadder
p
(
field_size
,
padinfo_
,
dest
);
fmt_helper
::
pad2
(
tm_time
.
tm_sec
,
dest
);
fmt_helper
::
pad2
(
tm_time
.
tm_sec
,
dest
);
}
}
};
};
// milliseconds
// milliseconds
template
<
typename
ScopedPadder
>
class
e_formatter
final
:
public
flag_formatter
class
e_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -422,20 +431,15 @@ public:
...
@@ -422,20 +431,15 @@ public:
void
format
(
const
details
::
log_msg
&
msg
,
const
std
::
tm
&
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
msg
,
const
std
::
tm
&
,
fmt
::
memory_buffer
&
dest
)
override
{
{
auto
millis
=
fmt_helper
::
time_fraction
<
std
::
chrono
::
milliseconds
>
(
msg
.
time
);
auto
millis
=
fmt_helper
::
time_fraction
<
std
::
chrono
::
milliseconds
>
(
msg
.
time
);
if
(
padinfo_
.
enabled
())
const
size_t
field_size
=
3
;
{
ScopedPadder
p
(
field_size
,
padinfo_
,
dest
);
const
size_t
field_size
=
3
;
fmt_helper
::
pad3
(
static_cast
<
uint32_t
>
(
millis
.
count
()),
dest
);
scoped_pad
p
(
field_size
,
padinfo_
,
dest
);
fmt_helper
::
pad3
(
static_cast
<
uint32_t
>
(
millis
.
count
()),
dest
);
}
else
{
fmt_helper
::
pad3
(
static_cast
<
uint32_t
>
(
millis
.
count
()),
dest
);
}
}
}
};
};
// microseconds
// microseconds
template
<
typename
ScopedPadder
>
class
f_formatter
final
:
public
flag_formatter
class
f_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -446,20 +450,16 @@ public:
...
@@ -446,20 +450,16 @@ public:
void
format
(
const
details
::
log_msg
&
msg
,
const
std
::
tm
&
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
msg
,
const
std
::
tm
&
,
fmt
::
memory_buffer
&
dest
)
override
{
{
auto
micros
=
fmt_helper
::
time_fraction
<
std
::
chrono
::
microseconds
>
(
msg
.
time
);
auto
micros
=
fmt_helper
::
time_fraction
<
std
::
chrono
::
microseconds
>
(
msg
.
time
);
if
(
padinfo_
.
enabled
())
{
const
size_t
field_size
=
6
;
const
size_t
field_size
=
6
;
ScopedPadder
p
(
field_size
,
padinfo_
,
dest
);
scoped_pad
p
(
field_size
,
padinfo_
,
dest
);
fmt_helper
::
pad6
(
static_cast
<
size_t
>
(
micros
.
count
()),
dest
);
fmt_helper
::
pad6
(
static_cast
<
size_t
>
(
micros
.
count
()),
dest
);
}
else
{
fmt_helper
::
pad6
(
static_cast
<
size_t
>
(
micros
.
count
()),
dest
);
}
}
}
};
};
// nanoseconds
// nanoseconds
template
<
typename
ScopedPadder
>
class
F_formatter
final
:
public
flag_formatter
class
F_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -470,20 +470,14 @@ public:
...
@@ -470,20 +470,14 @@ public:
void
format
(
const
details
::
log_msg
&
msg
,
const
std
::
tm
&
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
msg
,
const
std
::
tm
&
,
fmt
::
memory_buffer
&
dest
)
override
{
{
auto
ns
=
fmt_helper
::
time_fraction
<
std
::
chrono
::
nanoseconds
>
(
msg
.
time
);
auto
ns
=
fmt_helper
::
time_fraction
<
std
::
chrono
::
nanoseconds
>
(
msg
.
time
);
if
(
padinfo_
.
enabled
())
const
size_t
field_size
=
9
;
{
ScopedPadder
p
(
field_size
,
padinfo_
,
dest
);
const
size_t
field_size
=
9
;
fmt_helper
::
pad9
(
static_cast
<
size_t
>
(
ns
.
count
()),
dest
);
scoped_pad
p
(
field_size
,
padinfo_
,
dest
);
fmt_helper
::
pad9
(
static_cast
<
size_t
>
(
ns
.
count
()),
dest
);
}
else
{
fmt_helper
::
pad9
(
static_cast
<
size_t
>
(
ns
.
count
()),
dest
);
}
}
}
};
};
// seconds since epoch
// seconds since epoch
template
<
typename
ScopedPadder
>
class
E_formatter
final
:
public
flag_formatter
class
E_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -494,7 +488,7 @@ public:
...
@@ -494,7 +488,7 @@ public:
void
format
(
const
details
::
log_msg
&
msg
,
const
std
::
tm
&
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
msg
,
const
std
::
tm
&
,
fmt
::
memory_buffer
&
dest
)
override
{
{
const
size_t
field_size
=
10
;
const
size_t
field_size
=
10
;
scoped_pad
p
(
field_size
,
padinfo_
,
dest
);
ScopedPadder
p
(
field_size
,
padinfo_
,
dest
);
auto
duration
=
msg
.
time
.
time_since_epoch
();
auto
duration
=
msg
.
time
.
time_since_epoch
();
auto
seconds
=
std
::
chrono
::
duration_cast
<
std
::
chrono
::
seconds
>
(
duration
).
count
();
auto
seconds
=
std
::
chrono
::
duration_cast
<
std
::
chrono
::
seconds
>
(
duration
).
count
();
fmt_helper
::
append_int
(
seconds
,
dest
);
fmt_helper
::
append_int
(
seconds
,
dest
);
...
@@ -502,6 +496,7 @@ public:
...
@@ -502,6 +496,7 @@ public:
};
};
// AM/PM
// AM/PM
template
<
typename
ScopedPadder
>
class
p_formatter
final
:
public
flag_formatter
class
p_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -512,12 +507,13 @@ public:
...
@@ -512,12 +507,13 @@ public:
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
{
{
const
size_t
field_size
=
2
;
const
size_t
field_size
=
2
;
scoped_pad
p
(
field_size
,
padinfo_
,
dest
);
ScopedPadder
p
(
field_size
,
padinfo_
,
dest
);
fmt_helper
::
append_string_view
(
ampm
(
tm_time
),
dest
);
fmt_helper
::
append_string_view
(
ampm
(
tm_time
),
dest
);
}
}
};
};
// 12 hour clock 02:55:02 pm
// 12 hour clock 02:55:02 pm
template
<
typename
ScopedPadder
>
class
r_formatter
final
:
public
flag_formatter
class
r_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -528,7 +524,7 @@ public:
...
@@ -528,7 +524,7 @@ public:
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
{
{
const
size_t
field_size
=
11
;
const
size_t
field_size
=
11
;
scoped_pad
p
(
field_size
,
padinfo_
,
dest
);
ScopedPadder
p
(
field_size
,
padinfo_
,
dest
);
fmt_helper
::
pad2
(
to12h
(
tm_time
),
dest
);
fmt_helper
::
pad2
(
to12h
(
tm_time
),
dest
);
dest
.
push_back
(
':'
);
dest
.
push_back
(
':'
);
...
@@ -541,6 +537,7 @@ public:
...
@@ -541,6 +537,7 @@ public:
};
};
// 24-hour HH:MM time, equivalent to %H:%M
// 24-hour HH:MM time, equivalent to %H:%M
template
<
typename
ScopedPadder
>
class
R_formatter
final
:
public
flag_formatter
class
R_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -551,7 +548,7 @@ public:
...
@@ -551,7 +548,7 @@ public:
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
{
{
const
size_t
field_size
=
5
;
const
size_t
field_size
=
5
;
scoped_pad
p
(
field_size
,
padinfo_
,
dest
);
ScopedPadder
p
(
field_size
,
padinfo_
,
dest
);
fmt_helper
::
pad2
(
tm_time
.
tm_hour
,
dest
);
fmt_helper
::
pad2
(
tm_time
.
tm_hour
,
dest
);
dest
.
push_back
(
':'
);
dest
.
push_back
(
':'
);
...
@@ -560,6 +557,7 @@ public:
...
@@ -560,6 +557,7 @@ public:
};
};
// ISO 8601 time format (HH:MM:SS), equivalent to %H:%M:%S
// ISO 8601 time format (HH:MM:SS), equivalent to %H:%M:%S
template
<
typename
ScopedPadder
>
class
T_formatter
final
:
public
flag_formatter
class
T_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -570,7 +568,7 @@ public:
...
@@ -570,7 +568,7 @@ public:
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
{
{
const
size_t
field_size
=
8
;
const
size_t
field_size
=
8
;
scoped_pad
p
(
field_size
,
padinfo_
,
dest
);
ScopedPadder
p
(
field_size
,
padinfo_
,
dest
);
fmt_helper
::
pad2
(
tm_time
.
tm_hour
,
dest
);
fmt_helper
::
pad2
(
tm_time
.
tm_hour
,
dest
);
dest
.
push_back
(
':'
);
dest
.
push_back
(
':'
);
...
@@ -581,6 +579,7 @@ public:
...
@@ -581,6 +579,7 @@ public:
};
};
// ISO 8601 offset from UTC in timezone (+-HH:MM)
// ISO 8601 offset from UTC in timezone (+-HH:MM)
template
<
typename
ScopedPadder
>
class
z_formatter
final
:
public
flag_formatter
class
z_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -595,7 +594,7 @@ public:
...
@@ -595,7 +594,7 @@ public:
void
format
(
const
details
::
log_msg
&
msg
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
msg
,
const
std
::
tm
&
tm_time
,
fmt
::
memory_buffer
&
dest
)
override
{
{
const
size_t
field_size
=
6
;
const
size_t
field_size
=
6
;
scoped_pad
p
(
field_size
,
padinfo_
,
dest
);
ScopedPadder
p
(
field_size
,
padinfo_
,
dest
);
#ifdef _WIN32
#ifdef _WIN32
int
total_minutes
=
get_cached_offset
(
msg
,
tm_time
);
int
total_minutes
=
get_cached_offset
(
msg
,
tm_time
);
...
@@ -640,6 +639,7 @@ private:
...
@@ -640,6 +639,7 @@ private:
};
};
// Thread id
// Thread id
template
<
typename
ScopedPadder
>
class
t_formatter
final
:
public
flag_formatter
class
t_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -649,20 +649,14 @@ public:
...
@@ -649,20 +649,14 @@ public:
void
format
(
const
details
::
log_msg
&
msg
,
const
std
::
tm
&
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
msg
,
const
std
::
tm
&
,
fmt
::
memory_buffer
&
dest
)
override
{
{
if
(
padinfo_
.
enabled
())
const
auto
field_size
=
fmt_helper
::
count_digits
(
msg
.
thread_id
);
{
ScopedPadder
p
(
field_size
,
padinfo_
,
dest
);
const
auto
field_size
=
fmt_helper
::
count_digits
(
msg
.
thread_id
);
fmt_helper
::
append_int
(
msg
.
thread_id
,
dest
);
scoped_pad
p
(
field_size
,
padinfo_
,
dest
);
fmt_helper
::
append_int
(
msg
.
thread_id
,
dest
);
}
else
{
fmt_helper
::
append_int
(
msg
.
thread_id
,
dest
);
}
}
}
};
};
// Current pid
// Current pid
template
<
typename
ScopedPadder
>
class
pid_formatter
final
:
public
flag_formatter
class
pid_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -673,19 +667,13 @@ public:
...
@@ -673,19 +667,13 @@ public:
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
,
fmt
::
memory_buffer
&
dest
)
override
{
{
const
auto
pid
=
static_cast
<
uint32_t
>
(
details
::
os
::
pid
());
const
auto
pid
=
static_cast
<
uint32_t
>
(
details
::
os
::
pid
());
if
(
padinfo_
.
enabled
())
auto
field_size
=
fmt_helper
::
count_digits
(
pid
);
{
ScopedPadder
p
(
field_size
,
padinfo_
,
dest
);
auto
field_size
=
fmt_helper
::
count_digits
(
pid
);
fmt_helper
::
append_int
(
pid
,
dest
);
scoped_pad
p
(
field_size
,
padinfo_
,
dest
);
fmt_helper
::
append_int
(
pid
,
dest
);
}
else
{
fmt_helper
::
append_int
(
pid
,
dest
);
}
}
}
};
};
template
<
typename
ScopedPadder
>
class
v_formatter
final
:
public
flag_formatter
class
v_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -695,15 +683,8 @@ public:
...
@@ -695,15 +683,8 @@ public:
void
format
(
const
details
::
log_msg
&
msg
,
const
std
::
tm
&
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
msg
,
const
std
::
tm
&
,
fmt
::
memory_buffer
&
dest
)
override
{
{
if
(
padinfo_
.
enabled
())
ScopedPadder
p
(
msg
.
payload
.
size
(),
padinfo_
,
dest
);
{
fmt_helper
::
append_string_view
(
msg
.
payload
,
dest
);
scoped_pad
p
(
msg
.
payload
,
padinfo_
,
dest
);
fmt_helper
::
append_string_view
(
msg
.
payload
,
dest
);
}
else
{
fmt_helper
::
append_string_view
(
msg
.
payload
,
dest
);
}
}
}
};
};
...
@@ -716,8 +697,6 @@ public:
...
@@ -716,8 +697,6 @@ public:
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
,
fmt
::
memory_buffer
&
dest
)
override
void
format
(
const
details
::
log_msg
&
,
const
std
::
tm
&
,
fmt
::
memory_buffer
&
dest
)
override
{
{
const
size_t
field_size
=
1
;
scoped_pad
p
(
field_size
,
padinfo_
,
dest
);
dest
.
push_back
(
ch_
);
dest
.
push_back
(
ch_
);
}
}
...
@@ -757,6 +736,7 @@ public:
...
@@ -757,6 +736,7 @@ public:
msg
.
color_range_start
=
dest
.
size
();
msg
.
color_range_start
=
dest
.
size
();
}
}
};
};
class
color_stop_formatter
final
:
public
flag_formatter
class
color_stop_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -771,6 +751,7 @@ public:
...
@@ -771,6 +751,7 @@ public:
};
};
// print source location
// print source location
template
<
typename
ScopedPadder
>
class
source_location_formatter
final
:
public
flag_formatter
class
source_location_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -784,23 +765,20 @@ public:
...
@@ -784,23 +765,20 @@ public:
{
{
return
;
return
;
}
}
if
(
padinfo_
.
enabled
())
{
size_t
text_size
=
padinfo_
.
enabled
()
?
const
auto
text_size
=
std
::
char_traits
<
char
>::
length
(
msg
.
source
.
filename
)
+
fmt_helper
::
count_digits
(
msg
.
source
.
line
)
+
1
;
std
::
char_traits
<
char
>::
length
(
msg
.
source
.
filename
)
+
fmt_helper
::
count_digits
(
msg
.
source
.
line
)
+
1
:
scoped_pad
p
(
text_size
,
padinfo_
,
dest
);
0
;
fmt_helper
::
append_string_view
(
msg
.
source
.
filename
,
dest
);
dest
.
push_back
(
':'
);
ScopedPadder
p
(
text_size
,
padinfo_
,
dest
);
fmt_helper
::
append_int
(
msg
.
source
.
line
,
dest
);
fmt_helper
::
append_string_view
(
msg
.
source
.
filename
,
dest
);
}
dest
.
push_back
(
':'
);
else
fmt_helper
::
append_int
(
msg
.
source
.
line
,
dest
);
{
fmt_helper
::
append_string_view
(
msg
.
source
.
filename
,
dest
);
dest
.
push_back
(
':'
);
fmt_helper
::
append_int
(
msg
.
source
.
line
,
dest
);
}
}
}
};
};
// print source filename
// print source filename
template
<
typename
ScopedPadder
>
class
source_filename_formatter
final
:
public
flag_formatter
class
source_filename_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -814,11 +792,13 @@ public:
...
@@ -814,11 +792,13 @@ public:
{
{
return
;
return
;
}
}
scoped_pad
p
(
msg
.
source
.
filename
,
padinfo_
,
dest
);
size_t
text_size
=
padinfo_
.
enabled
()
?
std
::
char_traits
<
char
>::
length
(
msg
.
source
.
filename
)
:
0
;
ScopedPadder
p
(
text_size
,
padinfo_
,
dest
);
fmt_helper
::
append_string_view
(
msg
.
source
.
filename
,
dest
);
fmt_helper
::
append_string_view
(
msg
.
source
.
filename
,
dest
);
}
}
};
};
template
<
typename
ScopedPadder
>
class
short_filename_formatter
final
:
public
flag_formatter
class
short_filename_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -839,11 +819,13 @@ public:
...
@@ -839,11 +819,13 @@ public:
return
;
return
;
}
}
auto
filename
=
basename
(
msg
.
source
.
filename
);
auto
filename
=
basename
(
msg
.
source
.
filename
);
scoped_pad
p
(
filename
,
padinfo_
,
dest
);
size_t
text_size
=
padinfo_
.
enabled
()
?
std
::
char_traits
<
char
>::
length
(
filename
)
:
0
;
ScopedPadder
p
(
text_size
,
padinfo_
,
dest
);
fmt_helper
::
append_string_view
(
filename
,
dest
);
fmt_helper
::
append_string_view
(
filename
,
dest
);
}
}
};
};
template
<
typename
ScopedPadder
>
class
source_linenum_formatter
final
:
public
flag_formatter
class
source_linenum_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -857,19 +839,15 @@ public:
...
@@ -857,19 +839,15 @@ public:
{
{
return
;
return
;
}
}
if
(
padinfo_
.
enabled
())
{
auto
field_size
=
fmt_helper
::
count_digits
(
msg
.
source
.
line
);
auto
field_size
=
fmt_helper
::
count_digits
(
msg
.
source
.
line
);
ScopedPadder
p
(
field_size
,
padinfo_
,
dest
);
scoped_pad
p
(
field_size
,
padinfo_
,
dest
);
fmt_helper
::
append_int
(
msg
.
source
.
line
,
dest
);
fmt_helper
::
append_int
(
msg
.
source
.
line
,
dest
);
}
else
{
fmt_helper
::
append_int
(
msg
.
source
.
line
,
dest
);
}
}
}
};
};
// print source funcname
// print source funcname
template
<
typename
ScopedPadder
>
class
source_funcname_formatter
final
:
public
flag_formatter
class
source_funcname_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -883,13 +861,15 @@ public:
...
@@ -883,13 +861,15 @@ public:
{
{
return
;
return
;
}
}
scoped_pad
p
(
msg
.
source
.
funcname
,
padinfo_
,
dest
);
size_t
text_size
=
padinfo_
.
enabled
()
?
std
::
char_traits
<
char
>::
length
(
msg
.
source
.
funcname
)
:
0
;
ScopedPadder
p
(
text_size
,
padinfo_
,
dest
);
fmt_helper
::
append_string_view
(
msg
.
source
.
funcname
,
dest
);
fmt_helper
::
append_string_view
(
msg
.
source
.
funcname
,
dest
);
}
}
};
};
// print elapsed time since last message
// print elapsed time since last message
template
<
typename
Units
>
template
<
typename
ScopedPadder
,
typename
Units
>
class
elapsed_formatter
final
:
public
flag_formatter
class
elapsed_formatter
final
:
public
flag_formatter
{
{
public:
public:
...
@@ -905,15 +885,8 @@ public:
...
@@ -905,15 +885,8 @@ public:
auto
delta
=
msg
.
time
-
last_message_time_
;
auto
delta
=
msg
.
time
-
last_message_time_
;
auto
delta_units
=
std
::
chrono
::
duration_cast
<
DurationUnits
>
(
delta
);
auto
delta_units
=
std
::
chrono
::
duration_cast
<
DurationUnits
>
(
delta
);
last_message_time_
=
msg
.
time
;
last_message_time_
=
msg
.
time
;
if
(
padinfo_
.
enabled
())
ScopedPadder
p
(
6
,
padinfo_
,
dest
);
{
fmt_helper
::
pad6
(
static_cast
<
size_t
>
(
delta_units
.
count
()),
dest
);
scoped_pad
p
(
6
,
padinfo_
,
dest
);
fmt_helper
::
pad6
(
static_cast
<
size_t
>
(
delta_units
.
count
()),
dest
);
}
else
{
fmt_helper
::
pad6
(
static_cast
<
size_t
>
(
delta_units
.
count
()),
dest
);
}
}
}
protected:
protected:
...
@@ -986,7 +959,6 @@ public:
...
@@ -986,7 +959,6 @@ public:
dest
.
push_back
(
' '
);
dest
.
push_back
(
' '
);
}
}
#endif
#endif
dest
.
push_back
(
'['
);
dest
.
push_back
(
'['
);
// wrap the level name with color
// wrap the level name with color
msg
.
color_range_start
=
dest
.
size
();
msg
.
color_range_start
=
dest
.
size
();
...
@@ -1000,7 +972,7 @@ public:
...
@@ -1000,7 +972,7 @@ public:
if
(
!
msg
.
source
.
empty
())
if
(
!
msg
.
source
.
empty
())
{
{
dest
.
push_back
(
'['
);
dest
.
push_back
(
'['
);
const
char
*
filename
=
details
::
short_filename_formatter
::
basename
(
msg
.
source
.
filename
);
const
char
*
filename
=
details
::
short_filename_formatter
<
details
::
null_scoped_padder
>
::
basename
(
msg
.
source
.
filename
);
fmt_helper
::
append_string_view
(
filename
,
dest
);
fmt_helper
::
append_string_view
(
filename
,
dest
);
dest
.
push_back
(
':'
);
dest
.
push_back
(
':'
);
fmt_helper
::
append_int
(
msg
.
source
.
line
,
dest
);
fmt_helper
::
append_int
(
msg
.
source
.
line
,
dest
);
...
@@ -1071,6 +1043,8 @@ SPDLOG_INLINE std::tm pattern_formatter::get_time_(const details::log_msg &msg)
...
@@ -1071,6 +1043,8 @@ SPDLOG_INLINE std::tm pattern_formatter::get_time_(const details::log_msg &msg)
return
details
::
os
::
gmtime
(
log_clock
::
to_time_t
(
msg
.
time
));
return
details
::
os
::
gmtime
(
log_clock
::
to_time_t
(
msg
.
time
));
}
}
template
<
typename
Padder
>
SPDLOG_INLINE
void
pattern_formatter
::
handle_flag_
(
char
flag
,
details
::
padding_info
padding
)
SPDLOG_INLINE
void
pattern_formatter
::
handle_flag_
(
char
flag
,
details
::
padding_info
padding
)
{
{
switch
(
flag
)
switch
(
flag
)
...
@@ -1081,122 +1055,122 @@ SPDLOG_INLINE void pattern_formatter::handle_flag_(char flag, details::padding_i
...
@@ -1081,122 +1055,122 @@ SPDLOG_INLINE void pattern_formatter::handle_flag_(char flag, details::padding_i
break
;
break
;
case
'n'
:
// logger name
case
'n'
:
// logger name
formatters_
.
push_back
(
details
::
make_unique
<
details
::
name_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
name_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
'l'
:
// level
case
'l'
:
// level
formatters_
.
push_back
(
details
::
make_unique
<
details
::
level_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
level_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
'L'
:
// short level
case
'L'
:
// short level
formatters_
.
push_back
(
details
::
make_unique
<
details
::
short_level_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
short_level_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
't'
):
// thread id
case
(
't'
):
// thread id
formatters_
.
push_back
(
details
::
make_unique
<
details
::
t_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
t_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'v'
):
// the message text
case
(
'v'
):
// the message text
formatters_
.
push_back
(
details
::
make_unique
<
details
::
v_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
v_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'a'
):
// weekday
case
(
'a'
):
// weekday
formatters_
.
push_back
(
details
::
make_unique
<
details
::
a_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
a_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'A'
):
// short weekday
case
(
'A'
):
// short weekday
formatters_
.
push_back
(
details
::
make_unique
<
details
::
A_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
A_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'b'
):
case
(
'b'
):
case
(
'h'
):
// month
case
(
'h'
):
// month
formatters_
.
push_back
(
details
::
make_unique
<
details
::
b_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
b_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'B'
):
// short month
case
(
'B'
):
// short month
formatters_
.
push_back
(
details
::
make_unique
<
details
::
B_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
B_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'c'
):
// datetime
case
(
'c'
):
// datetime
formatters_
.
push_back
(
details
::
make_unique
<
details
::
c_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
c_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'C'
):
// year 2 digits
case
(
'C'
):
// year 2 digits
formatters_
.
push_back
(
details
::
make_unique
<
details
::
C_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
C_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'Y'
):
// year 4 digits
case
(
'Y'
):
// year 4 digits
formatters_
.
push_back
(
details
::
make_unique
<
details
::
Y_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
Y_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'D'
):
case
(
'D'
):
case
(
'x'
):
// datetime MM/DD/YY
case
(
'x'
):
// datetime MM/DD/YY
formatters_
.
push_back
(
details
::
make_unique
<
details
::
D_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
D_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'm'
):
// month 1-12
case
(
'm'
):
// month 1-12
formatters_
.
push_back
(
details
::
make_unique
<
details
::
m_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
m_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'd'
):
// day of month 1-31
case
(
'd'
):
// day of month 1-31
formatters_
.
push_back
(
details
::
make_unique
<
details
::
d_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
d_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'H'
):
// hours 24
case
(
'H'
):
// hours 24
formatters_
.
push_back
(
details
::
make_unique
<
details
::
H_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
H_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'I'
):
// hours 12
case
(
'I'
):
// hours 12
formatters_
.
push_back
(
details
::
make_unique
<
details
::
I_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
I_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'M'
):
// minutes
case
(
'M'
):
// minutes
formatters_
.
push_back
(
details
::
make_unique
<
details
::
M_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
M_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'S'
):
// seconds
case
(
'S'
):
// seconds
formatters_
.
push_back
(
details
::
make_unique
<
details
::
S_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
S_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'e'
):
// milliseconds
case
(
'e'
):
// milliseconds
formatters_
.
push_back
(
details
::
make_unique
<
details
::
e_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
e_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'f'
):
// microseconds
case
(
'f'
):
// microseconds
formatters_
.
push_back
(
details
::
make_unique
<
details
::
f_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
f_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'F'
):
// nanoseconds
case
(
'F'
):
// nanoseconds
formatters_
.
push_back
(
details
::
make_unique
<
details
::
F_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
F_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'E'
):
// seconds since epoch
case
(
'E'
):
// seconds since epoch
formatters_
.
push_back
(
details
::
make_unique
<
details
::
E_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
E_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'p'
):
// am/pm
case
(
'p'
):
// am/pm
formatters_
.
push_back
(
details
::
make_unique
<
details
::
p_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
p_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'r'
):
// 12 hour clock 02:55:02 pm
case
(
'r'
):
// 12 hour clock 02:55:02 pm
formatters_
.
push_back
(
details
::
make_unique
<
details
::
r_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
r_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'R'
):
// 24-hour HH:MM time
case
(
'R'
):
// 24-hour HH:MM time
formatters_
.
push_back
(
details
::
make_unique
<
details
::
R_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
R_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'T'
):
case
(
'T'
):
case
(
'X'
):
// ISO 8601 time format (HH:MM:SS)
case
(
'X'
):
// ISO 8601 time format (HH:MM:SS)
formatters_
.
push_back
(
details
::
make_unique
<
details
::
T_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
T_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'z'
):
// timezone
case
(
'z'
):
// timezone
formatters_
.
push_back
(
details
::
make_unique
<
details
::
z_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
z_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'P'
):
// pid
case
(
'P'
):
// pid
formatters_
.
push_back
(
details
::
make_unique
<
details
::
pid_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
pid_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'^'
):
// color range start
case
(
'^'
):
// color range start
...
@@ -1208,23 +1182,23 @@ SPDLOG_INLINE void pattern_formatter::handle_flag_(char flag, details::padding_i
...
@@ -1208,23 +1182,23 @@ SPDLOG_INLINE void pattern_formatter::handle_flag_(char flag, details::padding_i
break
;
break
;
case
(
'@'
):
// source location (filename:filenumber)
case
(
'@'
):
// source location (filename:filenumber)
formatters_
.
push_back
(
details
::
make_unique
<
details
::
source_location_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
source_location_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
's'
):
// short source filename - without directory name
case
(
's'
):
// short source filename - without directory name
formatters_
.
push_back
(
details
::
make_unique
<
details
::
short_filename_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
short_filename_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'g'
):
// full source filename
case
(
'g'
):
// full source filename
formatters_
.
push_back
(
details
::
make_unique
<
details
::
source_filename_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
source_filename_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'#'
):
// source line number
case
(
'#'
):
// source line number
formatters_
.
push_back
(
details
::
make_unique
<
details
::
source_linenum_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
source_linenum_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'!'
):
// source funcname
case
(
'!'
):
// source funcname
formatters_
.
push_back
(
details
::
make_unique
<
details
::
source_funcname_formatter
>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
source_funcname_formatter
<
Padder
>
>
(
padding
));
break
;
break
;
case
(
'%'
):
// % char
case
(
'%'
):
// % char
...
@@ -1232,19 +1206,19 @@ SPDLOG_INLINE void pattern_formatter::handle_flag_(char flag, details::padding_i
...
@@ -1232,19 +1206,19 @@ SPDLOG_INLINE void pattern_formatter::handle_flag_(char flag, details::padding_i
break
;
break
;
case
(
'u'
):
// elapsed time since last log message in nanos
case
(
'u'
):
// elapsed time since last log message in nanos
formatters_
.
push_back
(
details
::
make_unique
<
details
::
elapsed_formatter
<
std
::
chrono
::
nanoseconds
>>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
elapsed_formatter
<
Padder
,
std
::
chrono
::
nanoseconds
>>
(
padding
));
break
;
break
;
case
(
'i'
):
// elapsed time since last log message in micros
case
(
'i'
):
// elapsed time since last log message in micros
formatters_
.
push_back
(
details
::
make_unique
<
details
::
elapsed_formatter
<
std
::
chrono
::
microseconds
>>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
elapsed_formatter
<
Padder
,
std
::
chrono
::
microseconds
>>
(
padding
));
break
;
break
;
case
(
'o'
):
// elapsed time since last log message in millis
case
(
'o'
):
// elapsed time since last log message in millis
formatters_
.
push_back
(
details
::
make_unique
<
details
::
elapsed_formatter
<
std
::
chrono
::
milliseconds
>>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
elapsed_formatter
<
Padder
,
std
::
chrono
::
milliseconds
>>
(
padding
));
break
;
break
;
case
(
'O'
):
// elapsed time since last log message in seconds
case
(
'O'
):
// elapsed time since last log message in seconds
formatters_
.
push_back
(
details
::
make_unique
<
details
::
elapsed_formatter
<
std
::
chrono
::
seconds
>>
(
padding
));
formatters_
.
push_back
(
details
::
make_unique
<
details
::
elapsed_formatter
<
Padder
,
std
::
chrono
::
seconds
>>
(
padding
));
break
;
break
;
default:
// Unknown flag appears as is
default:
// Unknown flag appears as is
...
@@ -1262,7 +1236,7 @@ SPDLOG_INLINE void pattern_formatter::handle_flag_(char flag, details::padding_i
...
@@ -1262,7 +1236,7 @@ SPDLOG_INLINE void pattern_formatter::handle_flag_(char flag, details::padding_i
SPDLOG_INLINE
details
::
padding_info
pattern_formatter
::
handle_padspec_
(
std
::
string
::
const_iterator
&
it
,
std
::
string
::
const_iterator
end
)
SPDLOG_INLINE
details
::
padding_info
pattern_formatter
::
handle_padspec_
(
std
::
string
::
const_iterator
&
it
,
std
::
string
::
const_iterator
end
)
{
{
using
details
::
padding_info
;
using
details
::
padding_info
;
using
details
::
scoped_pad
;
using
details
::
scoped_pad
der
;
const
size_t
max_width
=
64
;
const
size_t
max_width
=
64
;
if
(
it
==
end
)
if
(
it
==
end
)
{
{
...
@@ -1317,7 +1291,15 @@ SPDLOG_INLINE void pattern_formatter::compile_pattern_(const std::string &patter
...
@@ -1317,7 +1291,15 @@ SPDLOG_INLINE void pattern_formatter::compile_pattern_(const std::string &patter
if
(
it
!=
end
)
if
(
it
!=
end
)
{
{
handle_flag_
(
*
it
,
padding
);
if
(
padding
.
enabled
())
{
handle_flag_
<
details
::
scoped_padder
>
(
*
it
,
padding
);
}
else
{
handle_flag_
<
details
::
null_scoped_padder
>
(
*
it
,
padding
);
}
}
}
else
else
{
{
...
...
include/spdlog/details/pattern_formatter.h
View file @
54456aee
...
@@ -82,6 +82,7 @@ private:
...
@@ -82,6 +82,7 @@ private:
std
::
vector
<
std
::
unique_ptr
<
details
::
flag_formatter
>>
formatters_
;
std
::
vector
<
std
::
unique_ptr
<
details
::
flag_formatter
>>
formatters_
;
std
::
tm
get_time_
(
const
details
::
log_msg
&
msg
);
std
::
tm
get_time_
(
const
details
::
log_msg
&
msg
);
template
<
typename
Padder
>
void
handle_flag_
(
char
flag
,
details
::
padding_info
padding
);
void
handle_flag_
(
char
flag
,
details
::
padding_info
padding
);
// Extract given pad spec (e.g. %8X)
// Extract given pad spec (e.g. %8X)
...
...
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