Skip to content

Commit a130826

Browse files
authored
Merge pull request #587 from luxonis/fix_logging_level
Respect log level, even if higher than WARN
2 parents 137f6b4 + d1b49b3 commit a130826

File tree

4 files changed

+116
-10
lines changed

4 files changed

+116
-10
lines changed

cmake/Depthai/DepthaiDeviceSideConfig.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
33

44
# "full commit hash of device side binary"
5-
set(DEPTHAI_DEVICE_SIDE_COMMIT "2470bb3fb3855de1808cf3cc94509ee771bae7d5")
5+
set(DEPTHAI_DEVICE_SIDE_COMMIT "1a59c80266cd7a30ba874aa8d4a8277e0bf161ec")
66

77
# "version if applicable"
88
set(DEPTHAI_DEVICE_SIDE_VERSION "")

src/device/DeviceBase.cpp

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -732,15 +732,9 @@ void DeviceBase::init2(Config cfg, const dai::Path& pathToMvcmd, tl::optional<co
732732

733733
// Below can throw - make sure to gracefully exit threads
734734
try {
735-
// Set logging level (if DEPTHAI_LEVEL lower than warning, then device is configured accordingly as well)
736-
if(spdlog::get_level() < spdlog::level::warn) {
737-
auto level = spdlogLevelToLogLevel(spdlog::get_level());
738-
setLogLevel(level);
739-
setLogOutputLevel(level);
740-
} else {
741-
setLogLevel(LogLevel::WARN);
742-
setLogOutputLevel(LogLevel::WARN);
743-
}
735+
auto level = spdlogLevelToLogLevel(spdlog::get_level());
736+
setLogLevel(level);
737+
setLogOutputLevel(level);
744738

745739
// Sets system inforation logging rate. By default 1s
746740
setSystemInformationLoggingRate(DEFAULT_SYSTEM_INFORMATION_LOGGING_RATE_HZ);

tests/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ hunter_private_data(
197197
dai_add_test(color_camera_node_test src/color_camera_node_test.cpp)
198198
dai_add_test(image_manip_node_test src/image_manip_node_test.cpp)
199199
dai_add_test(pipeline_test src/pipeline_test.cpp)
200+
dai_add_test(logging_test src/logging_test.cpp)
200201

201202
dai_add_test(neural_network_test src/neural_network_test.cpp)
202203
dai_test_compile_definitions(neural_network_test PRIVATE BLOB_PATH="${mobilenet_blob}")

tests/src/logging_test.cpp

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
#define CATCH_CONFIG_MAIN
2+
#include <spdlog/spdlog.h>
3+
4+
#include <catch2/catch.hpp>
5+
#include <chrono>
6+
#include <thread>
7+
8+
#include "depthai/depthai.hpp"
9+
10+
int test(dai::LogLevel logLevel) {
11+
// Create pipeline
12+
dai::Pipeline pipeline;
13+
14+
auto xIn = pipeline.create<dai::node::XLinkIn>();
15+
auto script = pipeline.create<dai::node::Script>();
16+
auto xOut = pipeline.create<dai::node::XLinkOut>();
17+
18+
xIn->setStreamName("input");
19+
xOut->setStreamName("output");
20+
21+
// Link xin node to script node
22+
xIn->out.link(script->inputs["log"]);
23+
script->outputs["out"].link(xOut->input);
24+
25+
script->setScript(R"(
26+
while True:
27+
_ = node.io["log"].get()
28+
node.trace("TRACE")
29+
node.debug("DEBUG")
30+
node.info("INFO")
31+
node.warn("WARN")
32+
node.error("ERROR")
33+
node.critical("CRITICAL")
34+
35+
message = Buffer(10)
36+
node.io["out"].send(message)
37+
)");
38+
39+
dai::Device device(pipeline);
40+
41+
auto in = device.getInputQueue("input");
42+
auto out = device.getOutputQueue("output");
43+
dai::Buffer message; // Arbitrary message, used only to control flow
44+
45+
device.setLogLevel(logLevel);
46+
device.setLogOutputLevel(logLevel);
47+
48+
// -1 below is for no_error, which cannot arrive
49+
std::array<bool, spdlog::level::n_levels - 1> arrivedLogs;
50+
for(auto& level : arrivedLogs) {
51+
level = false;
52+
}
53+
bool testPassed = true;
54+
auto logLevelConverted = static_cast<typename std::underlying_type<dai::LogLevel>::type>(logLevel);
55+
auto callbackSink = [&testPassed, &arrivedLogs, logLevelConverted](dai::LogMessage message) {
56+
// Convert message to spd for easier comparison
57+
auto messageLevelConverted = static_cast<typename std::underlying_type<dai::LogLevel>::type>(message.level);
58+
REQUIRE(messageLevelConverted >= logLevelConverted);
59+
if(messageLevelConverted < arrivedLogs.size()) {
60+
arrivedLogs[messageLevelConverted] = true;
61+
} else {
62+
FAIL();
63+
}
64+
};
65+
66+
device.addLogCallback(callbackSink);
67+
in->send(message);
68+
out->get(); // Wait for the device to send the log(s)
69+
using namespace std::chrono;
70+
std::this_thread::sleep_for(milliseconds(200)); // Wait for the logs to arrive
71+
72+
for(int i = 0; i < arrivedLogs.size(); i++) {
73+
if(i < logLevelConverted) {
74+
REQUIRE(!arrivedLogs[i]);
75+
} else {
76+
REQUIRE(arrivedLogs[i]);
77+
}
78+
}
79+
device.setLogLevel(dai::LogLevel::WARN);
80+
device.setLogOutputLevel(dai::LogLevel::WARN);
81+
// Exit with success error code
82+
return 0;
83+
}
84+
85+
TEST_CASE("TRACE") {
86+
test(dai::LogLevel::TRACE);
87+
}
88+
89+
TEST_CASE("DEBUG") {
90+
test(dai::LogLevel::DEBUG);
91+
}
92+
93+
TEST_CASE("INFO") {
94+
test(dai::LogLevel::INFO);
95+
}
96+
97+
TEST_CASE("WARN") {
98+
test(dai::LogLevel::WARN);
99+
}
100+
101+
TEST_CASE("ERROR") {
102+
test(dai::LogLevel::ERR);
103+
}
104+
105+
TEST_CASE("CRITICAL") {
106+
test(dai::LogLevel::CRITICAL);
107+
}
108+
109+
TEST_CASE("OFF") {
110+
test(dai::LogLevel::OFF);
111+
}

0 commit comments

Comments
 (0)