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
9aa6cdc4
Commit
9aa6cdc4
authored
Jun 28, 2019
by
gabime
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Updated systemd sink and tests
parent
8b403081
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
65 additions
and
47 deletions
+65
-47
include/spdlog/sinks/systemd_sink.h
include/spdlog/sinks/systemd_sink.h
+41
-40
tests/CMakeLists.txt
tests/CMakeLists.txt
+16
-1
tests/test_systemd.cpp
tests/test_systemd.cpp
+8
-6
No files found.
include/spdlog/sinks/systemd_sink.h
View file @
9aa6cdc4
...
...
@@ -12,26 +12,6 @@
namespace
spdlog
{
namespace
sinks
{
inline
int
syslog_level
(
level
::
level_enum
l
)
{
switch
(
l
)
{
case
level
:
:
off
:
case
level
:
:
trace
:
case
level
:
:
debug
:
return
LOG_DEBUG
;
case
level
:
:
info
:
return
LOG_INFO
;
case
level
:
:
warn
:
return
LOG_WARNING
;
case
level
:
:
err
:
return
LOG_ERR
;
case
level
:
:
critical
:
return
LOG_CRIT
;
default:
throw
std
::
invalid_argument
(
"systemd_sink.h syslog_level()"
);
}
}
/**
* Sink that write to systemd journal using the `sd_journal_send()` library call.
...
...
@@ -51,31 +31,52 @@ public:
systemd_sink
&
operator
=
(
const
systemd_sink
&
)
=
delete
;
protected:
std
::
array
<
int
,
7
>
syslog_levels_
{
/* level::trace */
LOG_DEBUG
,
/* level::debug */
LOG_DEBUG
,
/* level::info */
LOG_INFO
,
/* level::warn */
LOG_WARNING
,
/* level::err */
LOG_ERR
,
/* level::critical */
LOG_CRIT
,
/* level::off */
LOG_INFO
};
void
sink_it_
(
const
details
::
log_msg
&
msg
)
override
{
const
char
*
key_msg
=
"MESSAGE=%.*s"
;
const
char
*
key_prio
=
"PRIORITY=%d"
;
const
char
*
key_file
=
"CODE_FILE=%s"
;
const
char
*
key_line
=
"CODE_LINE=%d"
;
const
char
*
key_func
=
"CODE_FUNC=%s"
;
if
(
!
msg
.
source
.
filename
||
!
msg
.
source
.
funcname
||
msg
.
source
.
line
==
0
)
{
// Do not send source location if not available
key_file
=
nullptr
;
int
err
;
// Do not send source location if not available
if
(
msg
.
source
.
empty
())
{
// Note: function call inside '()' to avoid macro expansion
err
=
(
sd_journal_send
)(
"MESSAGE=%.*s"
,
static_cast
<
int
>
(
msg
.
payload
.
size
()),
msg
.
payload
.
data
(),
"PRIORITY=%d"
,
syslog_level
(
msg
.
level
),
nullptr
);
}
else
{
err
=
(
sd_journal_send
)(
"MESSAGE=%.*s"
,
static_cast
<
int
>
(
msg
.
payload
.
size
()),
msg
.
payload
.
data
(),
"PRIORITY=%d"
,
syslog_level
(
msg
.
level
),
"SOURCE_FILE=%s"
,
msg
.
source
.
filename
,
"SOURCE_LINE=%d"
,
msg
.
source
.
line
,
"SOURCE_FUNC=%s"
,
msg
.
source
.
funcname
,
nullptr
);
}
// Note: function call inside '()' to avoid macro expansion
int
err
=
(
sd_journal_send
)(
key_msg
,
static_cast
<
int
>
(
msg
.
payload
.
size
()),
msg
.
payload
.
data
(),
key_prio
,
syslog_level
(
msg
.
level
),
key_file
,
msg
.
source
.
filename
,
key_line
,
msg
.
source
.
line
,
key_func
,
msg
.
source
.
funcname
,
nullptr
);
if
(
err
)
{
throw
spdlog_ex
(
"Failed writing to systemd"
);
if
(
err
)
{
throw
spdlog_ex
(
"Failed writing to systemd"
,
errno
);
}
}
int
syslog_level
(
level
::
level_enum
l
)
{
return
syslog_levels_
.
at
(
static_cast
<
int
>
(
l
));
}
void
flush_
()
override
{}
...
...
tests/CMakeLists.txt
View file @
9aa6cdc4
find_package
(
PkgConfig
)
if
(
PkgConfig_FOUND
)
pkg_check_modules
(
systemd libsystemd
)
endif
()
set
(
SPDLOG_UTESTS_SOURCES
test_errors.cpp
test_file_helper.cpp
...
...
@@ -17,6 +22,10 @@ set(SPDLOG_UTESTS_SOURCES
test_stdout_api.cpp
test_dup_filter.cpp
)
if
(
systemd_FOUND
)
set
(
SPDLOG_UTESTS_SOURCES
${
SPDLOG_UTESTS_SOURCES
}
test_systemd.cpp
)
endif
()
file
(
MAKE_DIRECTORY
"
${
CMAKE_CURRENT_BINARY_DIR
}
/logs"
)
enable_testing
()
...
...
@@ -25,11 +34,14 @@ if(SPDLOG_BUILD_TESTS)
add_executable
(
spdlog-utests
${
SPDLOG_UTESTS_SOURCES
}
)
spdlog_enable_warnings
(
spdlog-utests
)
target_link_libraries
(
spdlog-utests PRIVATE spdlog
)
if
(
systemd_FOUND
)
target_link_libraries
(
spdlog-utests PRIVATE
${
systemd_LIBRARIES
}
)
endif
()
if
(
SPDLOG_SANITIZE_ADDRESS
)
spdlog_enable_sanitizer
(
spdlog-utests
)
endif
()
add_test
(
NAME spdlog-utests COMMAND spdlog-utests
)
endif
()
# The header-only library version tests
...
...
@@ -37,6 +49,9 @@ if(SPDLOG_BUILD_HO_TESTS)
add_executable
(
spdlog-utests-ho
${
SPDLOG_UTESTS_SOURCES
}
)
spdlog_enable_warnings
(
spdlog-utests-ho
)
target_link_libraries
(
spdlog-utests-ho PRIVATE spdlog::spdlog_header_only
)
if
(
systemd_FOUND
)
target_link_libraries
(
spdlog-utests-ho PRIVATE
${
systemd_LIBRARIES
}
)
endif
()
if
(
SPDLOG_SANITIZE_ADDRESS
)
spdlog_set_address_sanitizer
(
spdlog-utests-ho
)
endif
()
...
...
tests/test_systemd.cpp
View file @
9aa6cdc4
#include "includes.h"
#include
<spdlog/sinks/systemd_sink.h>
#include
"spdlog/sinks/systemd_sink.h"
TEST_CASE
(
"systemd"
,
"[all]"
)
{
auto
systemd_sink
=
std
::
make_shared
<
spdlog
::
sinks
::
systemd_sink_st
>
();
systemd_sink
->
set_level
(
spdlog
::
level
::
level_enum
::
err
);
spdlog
::
logger
logger
(
"spdlog_systemd_test"
,
systemd_sink
);
logger
.
debug
(
"test debug"
);
SPDLOG_LOGGER_ERROR
((
&
logger
),
"test error"
);
logger
.
info
(
"test info"
);
logger
.
set_level
(
spdlog
::
level
::
trace
);
logger
.
trace
(
"test spdlog trace"
);
logger
.
debug
(
"test spdlog debug"
);
SPDLOG_LOGGER_INFO
((
&
logger
),
"test spdlog info"
);
SPDLOG_LOGGER_WARN
((
&
logger
),
"test spdlog warn"
);
SPDLOG_LOGGER_ERROR
((
&
logger
),
"test spdlog error"
);
SPDLOG_LOGGER_CRITICAL
((
&
logger
),
"test spdlog critical"
);
}
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