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
c0f0fd71
Commit
c0f0fd71
authored
7 years ago
by
Gabi Melman
Committed by
GitHub
7 years ago
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #460 from asit-dhal/master
conditional logging
parents
d3e013a5
97be4532
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
410 additions
and
1 deletion
+410
-1
README.md
README.md
+7
-0
example.cpp
example/example.cpp
+14
-0
logger_impl.h
include/spdlog/details/logger_impl.h
+206
-0
logger.h
include/spdlog/logger.h
+27
-0
spdlog.h
include/spdlog/spdlog.h
+3
-1
cond_logging.cpp
tests/cond_logging.cpp
+149
-0
tests.vcxproj
tests/tests.vcxproj
+1
-0
tests.vcxproj.filters
tests/tests.vcxproj.filters
+3
-0
No files found.
README.md
View file @
c0f0fd71
...
...
@@ -30,6 +30,7 @@ Very fast, header only, C++ logging library. [![Build Status](https://travis-ci.
*
Feature rich
[
call style
](
#usage-example
)
using the excellent
[
fmt
](
https://github.com/fmtlib/fmt
)
library.
*
Extremely fast asynchronous mode (optional) - using lockfree queues and other tricks to reach millions of calls/sec.
*
[
Custom
](
https://github.com/gabime/spdlog/wiki/3.-Custom-formatting
)
formatting.
*
Conditional Logging
*
Multi/Single threaded loggers.
*
Various log targets:
*
Rotating log files.
...
...
@@ -91,6 +92,12 @@ int main(int, char*[])
console
->
info
(
"Welcome to spdlog!"
);
console
->
error
(
"Some error message with arg{}.."
,
1
);
// Conditional logging example
auto
i
=
2
;
console
->
info_if
(
i
<
20
,
"Welcome to spdlog conditional logging!"
);
console
->
warn_if
(
i
!=
0
,
"an important message"
);
console
->
critical_if
(
i
!=
2
,
"a false warning which won't show up"
);
// Formatting examples
console
->
warn
(
"Easy padding in numbers like {:08d}"
,
12
);
console
->
critical
(
"Support for int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}"
,
42
);
...
...
This diff is collapsed.
Click to expand it.
example/example.cpp
View file @
c0f0fd71
...
...
@@ -6,6 +6,10 @@
// spdlog usage example
//
//
#define SPDLOG_TRACE_ON
#define SPDLOG_DEBUG_ON
#include "spdlog/spdlog.h"
#include <iostream>
...
...
@@ -27,6 +31,12 @@ int main(int, char*[])
console
->
info
(
"Welcome to spdlog!"
);
console
->
error
(
"Some error message with arg{}.."
,
1
);
// Conditional logging example
auto
i
=
2
;
console
->
info_if
(
i
<
20
,
"Welcome to spdlog conditional logging!"
);
console
->
warn_if
(
i
!=
0
,
"an important message"
);
console
->
critical_if
(
i
!=
2
,
"a false warning which won't show up"
);
// Formatting examples
console
->
warn
(
"Easy padding in numbers like {:08d}"
,
12
);
console
->
critical
(
"Support for int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}"
,
42
);
...
...
@@ -34,6 +44,8 @@ int main(int, char*[])
console
->
info
(
"Positional args are {1} {0}.."
,
"too"
,
"supported"
);
console
->
info
(
"{:<30}"
,
"left aligned"
);
SPDLOG_DEBUG_IF
(
console
,
true
,
"This is a debug log"
);
spd
::
get
(
"console"
)
->
info
(
"loggers can be retrieved from a global registry using the spdlog::get(logger_name) function"
);
...
...
@@ -68,6 +80,8 @@ int main(int, char*[])
// define SPDLOG_DEBUG_ON or SPDLOG_TRACE_ON
SPDLOG_TRACE
(
console
,
"Enabled only #ifdef SPDLOG_TRACE_ON..{} ,{}"
,
1
,
3.23
);
SPDLOG_DEBUG
(
console
,
"Enabled only #ifdef SPDLOG_DEBUG_ON.. {} ,{}"
,
1
,
3.23
);
SPDLOG_DEBUG_IF
(
console
,
true
,
"This is a debug log"
);
// Asynchronous logging is very fast..
// Just call spdlog::set_async_mode(q_size) and all created loggers from now on will be asynchronous..
...
...
This diff is collapsed.
Click to expand it.
include/spdlog/details/logger_impl.h
View file @
c0f0fd71
...
...
@@ -158,6 +158,79 @@ inline void spdlog::logger::critical(const char* fmt, const Arg1 &arg1, const Ar
log
(
level
::
critical
,
fmt
,
arg1
,
args
...);
}
template
<
typename
...
Args
>
inline
void
spdlog
::
logger
::
log_if
(
const
bool
flag
,
level
::
level_enum
lvl
,
const
char
*
msg
)
{
if
(
flag
)
{
log
(
lvl
,
msg
);
}
}
template
<
typename
T
>
inline
void
spdlog
::
logger
::
log_if
(
const
bool
flag
,
level
::
level_enum
lvl
,
const
T
&
msg
)
{
if
(
flag
)
{
log
(
lvl
,
msg
);
}
}
template
<
typename
Arg1
,
typename
...
Args
>
inline
void
spdlog
::
logger
::
trace_if
(
const
bool
flag
,
const
char
*
fmt
,
const
Arg1
&
arg1
,
const
Args
&
...
args
)
{
if
(
flag
)
{
log
(
level
::
trace
,
fmt
,
arg1
,
args
...);
}
}
template
<
typename
Arg1
,
typename
...
Args
>
inline
void
spdlog
::
logger
::
debug_if
(
const
bool
flag
,
const
char
*
fmt
,
const
Arg1
&
arg1
,
const
Args
&
...
args
)
{
if
(
flag
)
{
log
(
level
::
debug
,
fmt
,
arg1
,
args
...);
}
}
template
<
typename
Arg1
,
typename
...
Args
>
inline
void
spdlog
::
logger
::
info_if
(
const
bool
flag
,
const
char
*
fmt
,
const
Arg1
&
arg1
,
const
Args
&
...
args
)
{
if
(
flag
)
{
log
(
level
::
info
,
fmt
,
arg1
,
args
...);
}
}
template
<
typename
Arg1
,
typename
...
Args
>
inline
void
spdlog
::
logger
::
warn_if
(
const
bool
flag
,
const
char
*
fmt
,
const
Arg1
&
arg1
,
const
Args
&
...
args
)
{
if
(
flag
)
{
log
(
level
::
warn
,
fmt
,
arg1
,
args
...);
}
}
template
<
typename
Arg1
,
typename
...
Args
>
inline
void
spdlog
::
logger
::
error_if
(
const
bool
flag
,
const
char
*
fmt
,
const
Arg1
&
arg1
,
const
Args
&
...
args
)
{
if
(
flag
)
{
log
(
level
::
err
,
fmt
,
arg1
,
args
...);
}
}
template
<
typename
Arg1
,
typename
...
Args
>
inline
void
spdlog
::
logger
::
critical_if
(
const
bool
flag
,
const
char
*
fmt
,
const
Arg1
&
arg1
,
const
Args
&
...
args
)
{
if
(
flag
)
{
log
(
level
::
critical
,
fmt
,
arg1
,
args
...);
}
}
template
<
typename
T
>
inline
void
spdlog
::
logger
::
trace
(
const
T
&
msg
)
{
...
...
@@ -196,6 +269,61 @@ inline void spdlog::logger::critical(const T& msg)
log
(
level
::
critical
,
msg
);
}
template
<
typename
T
>
inline
void
spdlog
::
logger
::
trace_if
(
const
bool
flag
,
const
T
&
msg
)
{
if
(
flag
)
{
log
(
level
::
trace
,
msg
);
}
}
template
<
typename
T
>
inline
void
spdlog
::
logger
::
debug_if
(
const
bool
flag
,
const
T
&
msg
)
{
if
(
flag
)
{
log
(
level
::
debug
,
msg
);
}
}
template
<
typename
T
>
inline
void
spdlog
::
logger
::
info_if
(
const
bool
flag
,
const
T
&
msg
)
{
if
(
flag
)
{
log
(
level
::
info
,
msg
);
}
}
template
<
typename
T
>
inline
void
spdlog
::
logger
::
warn_if
(
const
bool
flag
,
const
T
&
msg
)
{
if
(
flag
)
{
log
(
level
::
warn
,
msg
);
}
}
template
<
typename
T
>
inline
void
spdlog
::
logger
::
error_if
(
const
bool
flag
,
const
T
&
msg
)
{
if
(
flag
)
{
log
(
level
::
err
,
msg
);
}
}
template
<
typename
T
>
inline
void
spdlog
::
logger
::
critical_if
(
const
bool
flag
,
const
T
&
msg
)
{
if
(
flag
)
{
log
(
level
::
critical
,
msg
);
}
}
#ifdef SPDLOG_WCHAR_TO_UTF8_SUPPORT
#include <codecvt>
...
...
@@ -252,6 +380,84 @@ inline void spdlog::logger::critical(const wchar_t* fmt, const Args&... args)
{
log
(
level
::
critical
,
fmt
,
args
...);
}
//
// conditional logging
//
template
<
typename
...
Args
>
inline
void
spdlog
::
logger
::
log_if
(
const
bool
flag
,
level
::
level_enum
lvl
,
const
wchar_t
*
msg
)
{
if
(
flag
)
{
log
(
lvl
,
msg
);
}
}
template
<
typename
...
Args
>
inline
void
spdlog
::
logger
::
log_if
(
const
bool
flag
,
level
::
level_enum
lvl
,
const
wchar_t
*
fmt
,
const
Args
&
...
args
)
{
if
(
flag
)
{
log
(
lvl
,
fmt
,
args
);
}
}
template
<
typename
...
Args
>
inline
void
spdlog
::
logger
::
trace_if
(
const
bool
flag
,
const
wchar_t
*
fmt
,
const
Args
&
...
args
)
{
if
(
flag
)
{
log
(
level
::
trace
,
fmt
,
args
...);
}
}
template
<
typename
...
Args
>
inline
void
spdlog
::
logger
::
debug_if
(
const
bool
flag
,
const
wchar_t
*
fmt
,
const
Args
&
...
args
)
{
if
(
flag
)
{
log
(
level
::
debug
,
fmt
,
args
...);
}
}
template
<
typename
...
Args
>
inline
void
spdlog
::
logger
::
info_if
(
const
bool
flag
,
const
wchar_t
*
fmt
,
const
Args
&
...
args
)
{
if
(
flag
)
{
log
(
level
::
info
,
fmt
,
args
...);
}
}
template
<
typename
...
Args
>
inline
void
spdlog
::
logger
::
warn_if
(
const
bool
flag
,
const
wchar_t
*
fmt
,
const
Args
&
...
args
)
{
if
(
flag
)
{
log
(
level
::
warn
,
fmt
,
args
...);
}
}
template
<
typename
...
Args
>
inline
void
spdlog
::
logger
::
error_if
(
const
bool
flag
,
const
wchar_t
*
fmt
,
const
Args
&
...
args
)
{
if
(
flag
)
{
log
(
level
::
err
,
fmt
,
args
...);
}
}
template
<
typename
...
Args
>
inline
void
spdlog
::
logger
::
critical_if
(
const
bool
flag
,
const
wchar_t
*
fmt
,
const
Args
&
...
args
)
{
if
(
flag
)
{
log
(
level
::
critical
,
fmt
,
args
...);
}
}
#endif // SPDLOG_WCHAR_TO_UTF8_SUPPORT
...
...
This diff is collapsed.
Click to expand it.
include/spdlog/logger.h
View file @
c0f0fd71
...
...
@@ -43,6 +43,16 @@ public:
template
<
typename
Arg1
,
typename
...
Args
>
void
warn
(
const
char
*
fmt
,
const
Arg1
&
,
const
Args
&
...
args
);
template
<
typename
Arg1
,
typename
...
Args
>
void
error
(
const
char
*
fmt
,
const
Arg1
&
,
const
Args
&
...
args
);
template
<
typename
Arg1
,
typename
...
Args
>
void
critical
(
const
char
*
fmt
,
const
Arg1
&
,
const
Args
&
...
args
);
template
<
typename
...
Args
>
void
log_if
(
const
bool
flag
,
level
::
level_enum
lvl
,
const
char
*
fmt
,
const
Args
&
...
args
);
template
<
typename
...
Args
>
void
log_if
(
const
bool
flag
,
level
::
level_enum
lvl
,
const
char
*
msg
);
template
<
typename
Arg1
,
typename
...
Args
>
void
trace_if
(
const
bool
flag
,
const
char
*
fmt
,
const
Arg1
&
,
const
Args
&
...
args
);
template
<
typename
Arg1
,
typename
...
Args
>
void
debug_if
(
const
bool
flag
,
const
char
*
fmt
,
const
Arg1
&
,
const
Args
&
...
args
);
template
<
typename
Arg1
,
typename
...
Args
>
void
info_if
(
const
bool
flag
,
const
char
*
fmt
,
const
Arg1
&
,
const
Args
&
...
args
);
template
<
typename
Arg1
,
typename
...
Args
>
void
warn_if
(
const
bool
flag
,
const
char
*
fmt
,
const
Arg1
&
,
const
Args
&
...
args
);
template
<
typename
Arg1
,
typename
...
Args
>
void
error_if
(
const
bool
flag
,
const
char
*
fmt
,
const
Arg1
&
,
const
Args
&
...
args
);
template
<
typename
Arg1
,
typename
...
Args
>
void
critical_if
(
const
bool
flag
,
const
char
*
fmt
,
const
Arg1
&
,
const
Args
&
...
args
);
#ifdef SPDLOG_WCHAR_TO_UTF8_SUPPORT
template
<
typename
...
Args
>
void
log
(
level
::
level_enum
lvl
,
const
wchar_t
*
msg
);
template
<
typename
...
Args
>
void
log
(
level
::
level_enum
lvl
,
const
wchar_t
*
fmt
,
const
Args
&
...
args
);
...
...
@@ -52,6 +62,15 @@ public:
template
<
typename
...
Args
>
void
warn
(
const
wchar_t
*
fmt
,
const
Args
&
...
args
);
template
<
typename
...
Args
>
void
error
(
const
wchar_t
*
fmt
,
const
Args
&
...
args
);
template
<
typename
...
Args
>
void
critical
(
const
wchar_t
*
fmt
,
const
Args
&
...
args
);
template
<
typename
...
Args
>
void
log_if
(
const
bool
flag
,
level
::
level_enum
lvl
,
const
wchar_t
*
msg
);
template
<
typename
...
Args
>
void
log_if
(
const
bool
flag
,
level
::
level_enum
lvl
,
const
wchar_t
*
fmt
,
const
Args
&
...
args
);
template
<
typename
...
Args
>
void
trace_if
(
const
bool
flag
,
const
wchar_t
*
fmt
,
const
Args
&
...
args
);
template
<
typename
...
Args
>
void
debug_if
(
const
bool
flag
,
const
wchar_t
*
fmt
,
const
Args
&
...
args
);
template
<
typename
...
Args
>
void
info_if
(
const
bool
flag
,
const
wchar_t
*
fmt
,
const
Args
&
...
args
);
template
<
typename
...
Args
>
void
warn_if
(
const
bool
flag
,
const
wchar_t
*
fmt
,
const
Args
&
...
args
);
template
<
typename
...
Args
>
void
error_if
(
const
bool
flag
,
const
wchar_t
*
fmt
,
const
Args
&
...
args
);
template
<
typename
...
Args
>
void
critical_if
(
const
bool
flag
,
const
wchar_t
*
fmt
,
const
Args
&
...
args
);
#endif // SPDLOG_WCHAR_TO_UTF8_SUPPORT
template
<
typename
T
>
void
log
(
level
::
level_enum
lvl
,
const
T
&
);
...
...
@@ -62,6 +81,14 @@ public:
template
<
typename
T
>
void
error
(
const
T
&
);
template
<
typename
T
>
void
critical
(
const
T
&
);
template
<
typename
T
>
void
log_if
(
const
bool
flag
,
level
::
level_enum
lvl
,
const
T
&
);
template
<
typename
T
>
void
trace_if
(
const
bool
flag
,
const
T
&
);
template
<
typename
T
>
void
debug_if
(
const
bool
flag
,
const
T
&
);
template
<
typename
T
>
void
info_if
(
const
bool
flag
,
const
T
&
);
template
<
typename
T
>
void
warn_if
(
const
bool
flag
,
const
T
&
);
template
<
typename
T
>
void
error_if
(
const
bool
flag
,
const
T
&
);
template
<
typename
T
>
void
critical_if
(
const
bool
flag
,
const
T
&
);
bool
should_log
(
level
::
level_enum
)
const
;
void
set_level
(
level
::
level_enum
);
level
::
level_enum
level
()
const
;
...
...
This diff is collapsed.
Click to expand it.
include/spdlog/spdlog.h
View file @
c0f0fd71
...
...
@@ -162,23 +162,25 @@ void drop_all();
// SPDLOG_TRACE(my_logger, "some trace message");
// SPDLOG_TRACE(my_logger, "another trace message {} {}", 1, 2);
// SPDLOG_DEBUG(my_logger, "some debug message {} {}", 3, 4);
// SPDLOG_DEBUG_IF(my_logger, true, "some debug message {} {}", 3, 4);
///////////////////////////////////////////////////////////////////////////////
#ifdef SPDLOG_TRACE_ON
#define SPDLOG_STR_H(x) #x
#define SPDLOG_STR_HELPER(x) SPDLOG_STR_H(x)
#define SPDLOG_TRACE(logger, ...) logger->trace("[" __FILE__ " line #" SPDLOG_STR_HELPER(__LINE__) "] " __VA_ARGS__)
#define SPDLOG_TRACE_IF(logger, flag, ...) logger->trace_if(flag, "[" __FILE__ " line #" SPDLOG_STR_HELPER(__LINE__) "] " __VA_ARGS__)
#else
#define SPDLOG_TRACE(logger, ...)
#endif
#ifdef SPDLOG_DEBUG_ON
#define SPDLOG_DEBUG(logger, ...) logger->debug(__VA_ARGS__)
#define SPDLOG_DEBUG_IF(logger, flag, ...) logger->debug_if(flag, __VA_ARGS__)
#else
#define SPDLOG_DEBUG(logger, ...)
#endif
}
...
...
This diff is collapsed.
Click to expand it.
tests/cond_logging.cpp
0 → 100644
View file @
c0f0fd71
#include "includes.h"
template
<
class
T
>
std
::
string
conditional_log
(
const
bool
flag
,
const
T
&
what
,
spdlog
::
level
::
level_enum
logger_level
)
{
std
::
ostringstream
oss
;
auto
oss_sink
=
std
::
make_shared
<
spdlog
::
sinks
::
ostream_sink_mt
>
(
oss
);
spdlog
::
logger
oss_logger
(
"oss"
,
oss_sink
);
oss_logger
.
set_level
(
logger_level
);
oss_logger
.
set_pattern
(
"%v"
);
switch
(
logger_level
)
{
case
spdlog
:
:
level
::
trace
:
oss_logger
.
trace_if
(
flag
,
what
);
break
;
case
spdlog
:
:
level
::
debug
:
oss_logger
.
debug_if
(
flag
,
what
);
break
;
case
spdlog
:
:
level
::
info
:
oss_logger
.
info_if
(
flag
,
what
);
break
;
case
spdlog
:
:
level
::
warn
:
oss_logger
.
warn_if
(
flag
,
what
);
break
;
case
spdlog
:
:
level
::
err
:
oss_logger
.
error_if
(
flag
,
what
);
break
;
case
spdlog
:
:
level
::
critical
:
oss_logger
.
critical_if
(
flag
,
what
);
break
;
}
return
oss
.
str
().
substr
(
0
,
oss
.
str
().
length
()
-
spdlog
::
details
::
os
::
eol_size
);
}
template
<
typename
Arg1
,
typename
...
Args
>
std
::
string
conditional_log_varags
(
spdlog
::
level
::
level_enum
logger_level
,
const
bool
flag
,
const
char
*
fmt
,
const
Arg1
&
arg1
,
const
Args
&
...
args
)
{
std
::
ostringstream
oss
;
auto
oss_sink
=
std
::
make_shared
<
spdlog
::
sinks
::
ostream_sink_mt
>
(
oss
);
spdlog
::
logger
oss_logger
(
"oss"
,
oss_sink
);
oss_logger
.
set_level
(
logger_level
);
oss_logger
.
set_pattern
(
"%v"
);
switch
(
logger_level
)
{
case
spdlog
:
:
level
::
trace
:
oss_logger
.
trace_if
(
flag
,
fmt
,
arg1
,
args
...);
break
;
case
spdlog
:
:
level
::
debug
:
oss_logger
.
debug_if
(
flag
,
fmt
,
arg1
,
args
...);
break
;
case
spdlog
:
:
level
::
info
:
oss_logger
.
info_if
(
flag
,
fmt
,
arg1
,
args
...);
break
;
case
spdlog
:
:
level
::
warn
:
oss_logger
.
warn_if
(
flag
,
fmt
,
arg1
,
args
...);
break
;
case
spdlog
:
:
level
::
err
:
oss_logger
.
error_if
(
flag
,
fmt
,
arg1
,
args
...);
break
;
case
spdlog
:
:
level
::
critical
:
oss_logger
.
critical_if
(
flag
,
fmt
,
arg1
,
args
...);
break
;
}
return
oss
.
str
().
substr
(
0
,
oss
.
str
().
length
()
-
spdlog
::
details
::
os
::
eol_size
);
}
#ifdef SPDLOG_WCHAR_TO_UTF8_SUPPORT
template
<
typename
Arg1
,
typename
...
Args
>
std
::
wstring
conditional_log_varags
(
spdlog
::
level
::
level_enum
logger_level
,
const
bool
flag
,
const
wchar_t
*
fmt
,
const
Arg1
&
arg1
,
const
Args
&
...
args
)
{
std
::
wstringstream
oss
;
auto
oss_sink
=
std
::
make_shared
<
spdlog
::
sinks
::
ostream_sink_mt
>
(
oss
);
spdlog
::
logger
oss_logger
(
"oss"
,
oss_sink
);
oss_logger
.
set_level
(
logger_level
);
oss_logger
.
set_pattern
(
"%v"
);
switch
(
logger_level
)
{
case
spdlog
:
:
level
::
trace
:
oss_logger
.
trace_if
(
flag
,
fmt
,
arg1
,
args
...);
break
;
case
spdlog
:
:
level
::
debug
:
oss_logger
.
debug_if
(
flag
,
fmt
,
arg1
,
args
...);
break
;
case
spdlog
:
:
level
::
info
:
oss_logger
.
info_if
(
flag
,
fmt
,
arg1
,
args
...);
break
;
case
spdlog
:
:
level
::
warn
:
oss_logger
.
warn_if
(
flag
,
fmt
,
arg1
,
args
...);
break
;
case
spdlog
:
:
level
::
err
:
oss_logger
.
error_if
(
flag
,
fmt
,
arg1
,
args
...);
break
;
case
spdlog
:
:
level
::
critical
:
oss_logger
.
critical_if
(
flag
,
fmt
,
arg1
,
args
...);
break
;
}
return
oss
.
str
().
substr
(
0
,
oss
.
str
().
length
()
-
spdlog
::
details
::
os
::
eol_size
);
}
#endif // SPDLOG_WCHAR_TO_UTF8_SUPPORT
TEST_CASE
(
"conditional_trace_simple"
,
"[conditional_trace_simple]"
)
{
//const char
for
(
auto
i
=
0
;
i
<
2
;
i
++
)
{
REQUIRE
(
conditional_log
((
i
%
2
==
0
),
"Hello"
,
spdlog
::
level
::
trace
)
==
(
i
%
2
==
0
?
"Hello"
:
""
));
REQUIRE
(
conditional_log
((
i
%
2
==
0
),
"Hello"
,
spdlog
::
level
::
debug
)
==
(
i
%
2
==
0
?
"Hello"
:
""
));
REQUIRE
(
conditional_log
((
i
%
2
==
0
),
"Hello"
,
spdlog
::
level
::
info
)
==
(
i
%
2
==
0
?
"Hello"
:
""
));
REQUIRE
(
conditional_log
((
i
%
2
==
0
),
"Hello"
,
spdlog
::
level
::
warn
)
==
(
i
%
2
==
0
?
"Hello"
:
""
));
REQUIRE
(
conditional_log
((
i
%
2
==
0
),
"Hello"
,
spdlog
::
level
::
err
)
==
(
i
%
2
==
0
?
"Hello"
:
""
));
REQUIRE
(
conditional_log
((
i
%
2
==
0
),
"Hello"
,
spdlog
::
level
::
critical
)
==
(
i
%
2
==
0
?
"Hello"
:
""
));
}
}
TEST_CASE
(
"conditional_trace_varargs"
,
"[conditional_trace_varargs]"
)
{
//const char
for
(
auto
i
=
0
;
i
<
2
;
i
++
)
{
REQUIRE
(
conditional_log_varags
(
spdlog
::
level
::
trace
,
(
i
%
2
==
0
),
"Hello {}"
,
i
)
==
(
i
%
2
==
0
?
"Hello "
+
std
::
to_string
(
i
)
:
""
));
REQUIRE
(
conditional_log_varags
(
spdlog
::
level
::
debug
,
(
i
%
2
==
0
),
"Hello {}"
,
i
)
==
(
i
%
2
==
0
?
"Hello "
+
std
::
to_string
(
i
)
:
""
));
REQUIRE
(
conditional_log_varags
(
spdlog
::
level
::
info
,
(
i
%
2
==
0
),
"Hello {}"
,
i
)
==
(
i
%
2
==
0
?
"Hello "
+
std
::
to_string
(
i
)
:
""
));
REQUIRE
(
conditional_log_varags
(
spdlog
::
level
::
warn
,
(
i
%
2
==
0
),
"Hello {}"
,
i
)
==
(
i
%
2
==
0
?
"Hello "
+
std
::
to_string
(
i
)
:
""
));
REQUIRE
(
conditional_log_varags
(
spdlog
::
level
::
err
,
(
i
%
2
==
0
),
"Hello {}"
,
i
)
==
(
i
%
2
==
0
?
"Hello "
+
std
::
to_string
(
i
)
:
""
));
REQUIRE
(
conditional_log_varags
(
spdlog
::
level
::
critical
,
(
i
%
2
==
0
),
"Hello {}"
,
i
)
==
(
i
%
2
==
0
?
"Hello "
+
std
::
to_string
(
i
)
:
""
));
#ifdef SPDLOG_WCHAR_TO_UTF8_SUPPORT
REQUIRE
(
conditional_log_varags
(
spdlog
::
level
::
trace
,
(
i
%
2
==
0
),
L"Hello {}"
,
i
)
==
(
i
%
2
==
0
?
L"Hello "
+
std
::
to_wstring
(
i
)
:
L""
));
REQUIRE
(
conditional_log_varags
(
spdlog
::
level
::
debug
,
(
i
%
2
==
0
),
L"Hello {}"
,
i
)
==
(
i
%
2
==
0
?
L"Hello "
+
std
::
to_wstring
(
i
)
:
L""
));
REQUIRE
(
conditional_log_varags
(
spdlog
::
level
::
info
,
(
i
%
2
==
0
),
L"Hello {}"
,
i
)
==
(
i
%
2
==
0
?
L"Hello "
+
std
::
to_wstring
(
i
)
:
L""
));
REQUIRE
(
conditional_log_varags
(
spdlog
::
level
::
warn
,
(
i
%
2
==
0
),
L"Hello {}"
,
i
)
==
(
i
%
2
==
0
?
L"Hello "
+
std
::
to_wstring
(
i
)
:
L""
));
REQUIRE
(
conditional_log_varags
(
spdlog
::
level
::
err
,
(
i
%
2
==
0
),
L"Hello {}"
,
i
)
==
(
i
%
2
==
0
?
L"Hello "
+
std
::
to_wstring
(
i
)
:
L""
));
REQUIRE
(
conditional_log_varags
(
spdlog
::
level
::
critical
,
(
i
%
2
==
0
),
L"Hello {}"
,
i
)
==
(
i
%
2
==
0
?
L"Hello "
+
std
::
to_wstring
(
i
)
:
L""
));
#endif // SPDLOG_WCHAR_TO_UTF8_SUPPORT
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
tests/tests.vcxproj
View file @
c0f0fd71
...
...
@@ -125,6 +125,7 @@
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile
Include=
"cond_logging.cpp"
/>
<ClCompile
Include=
"errors.cpp"
/>
<ClCompile
Include=
"file_helper.cpp"
/>
<ClCompile
Include=
"file_log.cpp"
/>
...
...
This diff is collapsed.
Click to expand it.
tests/tests.vcxproj.filters
View file @
c0f0fd71
...
...
@@ -36,6 +36,9 @@
<ClCompile
Include=
"errors.cpp"
>
<Filter>
Source Files
</Filter>
</ClCompile>
<ClCompile
Include=
"cond_logging.cpp"
>
<Filter>
Source Files
</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude
Include=
"includes.h"
>
...
...
This diff is collapsed.
Click to expand it.
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