Skip to content

Commit 0074cb6

Browse files
authored
Merge pull request #692 from elbeno/flow-log-env
🎨 Allow flow steps to override log environment
2 parents 8ed2e94 + 88250a0 commit 0074cb6

File tree

3 files changed

+37
-46
lines changed

3 files changed

+37
-46
lines changed

include/flow/impl.hpp

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22

33
#include <flow/common.hpp>
44
#include <flow/log.hpp>
5-
#include <log/env.hpp>
6-
#include <log/flavor.hpp>
7-
#include <log/level.hpp>
85
#include <log/log.hpp>
96

107
#include <stdx/ct_string.hpp>
@@ -22,13 +19,11 @@ template <stdx::ct_string FlowName, typename CTNode>
2219
constexpr auto run_func() -> void {
2320
if (CTNode::condition) {
2421
if constexpr (not FlowName.empty()) {
25-
using log_spec_t =
26-
decltype(get_log_spec<CTNode, log_spec_id_t<FlowName>>());
27-
CIB_LOG_ENV(logging::get_level, log_spec_t::level,
28-
logging::get_flavor,
29-
stdx::type_identity<typename log_spec_t::flavor>{});
30-
CIB_LOG("flow.{}({})", typename CTNode::type_t{},
31-
typename CTNode::name_t{});
22+
logging::log<
23+
decltype(get_log_env<CTNode, log_env_id_t<FlowName>>())>(
24+
__FILE__, __LINE__,
25+
sc::format("flow.{}({})"_sc, typename CTNode::type_t{},
26+
typename CTNode::name_t{}));
3227
}
3328
typename CTNode::func_t{}();
3429
}
@@ -65,21 +60,15 @@ template <stdx::ct_string Name, auto... FuncPtrs> struct inlined_func_list {
6560
stdx::ct_string_to_type<Name, sc::string_constant>();
6661

6762
if constexpr (loggingEnabled) {
68-
using log_spec_t = decltype(get_log_spec<inlined_func_list>());
69-
CIB_LOG_ENV(logging::get_level, log_spec_t::level,
70-
logging::get_flavor,
71-
stdx::type_identity<typename log_spec_t::flavor>{});
72-
CIB_LOG("flow.start({})", name);
63+
logging::log<decltype(get_log_env<inlined_func_list>())>(
64+
__FILE__, __LINE__, sc::format("flow.start({})"_sc, name));
7365
}
7466

7567
(FuncPtrs(), ...);
7668

7769
if constexpr (loggingEnabled) {
78-
using log_spec_t = decltype(get_log_spec<inlined_func_list>());
79-
CIB_LOG_ENV(logging::get_level, log_spec_t::level,
80-
logging::get_flavor,
81-
stdx::type_identity<typename log_spec_t::flavor>{});
82-
CIB_LOG("flow.end({})", name);
70+
logging::log<decltype(get_log_env<inlined_func_list>())>(
71+
__FILE__, __LINE__, sc::format("flow.end({})"_sc, name));
8372
}
8473
}
8574
};

include/flow/log.hpp

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,35 @@
11
#pragma once
22

3+
#include <log/env.hpp>
34
#include <log/log.hpp>
45

56
#include <stdx/ct_string.hpp>
67

78
#include <type_traits>
89

910
namespace flow {
10-
struct default_log_spec {
11-
using flavor = logging::default_flavor_t;
12-
constexpr static auto level = logging::level::TRACE;
13-
};
11+
using default_log_env =
12+
logging::make_env_t<logging::get_level, logging::level::TRACE>;
1413
template <stdx::ct_string, typename...>
15-
constexpr auto log_spec = default_log_spec{};
14+
constexpr auto log_env = default_log_env{};
1615

17-
template <stdx::ct_string Name> struct log_spec_id_t {
16+
template <stdx::ct_string Name> struct log_env_id_t {
1817
constexpr static auto ct_name = Name;
1918
};
2019

21-
template <typename T, typename Fallback = log_spec_id_t<"default">,
20+
template <typename T, typename Fallback = log_env_id_t<"default">,
2221
typename... DummyArgs>
2322
requires(sizeof...(DummyArgs) == 0)
24-
constexpr static auto get_log_spec() {
25-
using log_spec_t = decltype(log_spec<T::ct_name, DummyArgs...>);
26-
if constexpr (std::is_same_v<log_spec_t, default_log_spec const>) {
23+
constexpr static auto get_log_env() {
24+
using log_env_t = decltype(log_env<T::ct_name, DummyArgs...>);
25+
if constexpr (std::is_same_v<log_env_t, default_log_env const>) {
2726
if constexpr (Fallback::ct_name == stdx::ct_string{"default"}) {
28-
return log_spec<Fallback::ct_name, DummyArgs...>;
27+
return log_env<Fallback::ct_name, DummyArgs...>;
2928
} else {
30-
return get_log_spec<Fallback>();
29+
return get_log_env<Fallback>();
3130
}
3231
} else {
33-
return log_spec_t{};
32+
return log_env_t{};
3433
}
3534
}
3635
} // namespace flow

test/flow/custom_log_levels.cpp

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -50,16 +50,19 @@ struct log_config {
5050

5151
template <> inline auto logging::config<> = log_config{};
5252

53-
struct user1_log_spec : flow::default_log_spec {
54-
constexpr static auto level = logging::level::USER1;
55-
};
56-
struct user2_log_spec : flow::default_log_spec {
57-
constexpr static auto level = logging::level::USER2;
58-
};
59-
struct info_log_spec : flow::default_log_spec {
60-
constexpr static auto level = logging::level::INFO;
61-
};
62-
template <> constexpr auto flow::log_spec<"default"> = info_log_spec{};
53+
using user1_log_env =
54+
logging::extend_env_t<flow::default_log_env, logging::get_level,
55+
logging::level::USER1>;
56+
57+
using user2_log_env =
58+
logging::extend_env_t<flow::default_log_env, logging::get_level,
59+
logging::level::USER2>;
60+
61+
using info_log_env =
62+
logging::extend_env_t<flow::default_log_env, logging::get_level,
63+
logging::level::INFO>;
64+
65+
template <> constexpr auto flow::log_env<"default"> = info_log_env{};
6366

6467
TEST_CASE("override default log level", "[flow_custom_log_levels]") {
6568
run_flow<TestFlowA, cib::exports<TestFlowA>,
@@ -70,8 +73,8 @@ TEST_CASE("override default log level", "[flow_custom_log_levels]") {
7073
[](auto level) { CHECK(level == logging::level::INFO); });
7174
}
7275

73-
template <> constexpr auto flow::log_spec<"B"> = user1_log_spec{};
74-
template <> constexpr auto flow::log_spec<"msB"> = user2_log_spec{};
76+
template <> constexpr auto flow::log_env<"B"> = user1_log_env{};
77+
template <> constexpr auto flow::log_env<"msB"> = user2_log_env{};
7578

7679
TEST_CASE("override log level by name", "[flow_custom_log_levels]") {
7780
run_flow<TestFlowB, cib::exports<TestFlowB>,
@@ -83,7 +86,7 @@ TEST_CASE("override log level by name", "[flow_custom_log_levels]") {
8386
CHECK(log_calls[2] == logging::level::USER1);
8487
}
8588

86-
template <> constexpr auto flow::log_spec<"C"> = user1_log_spec{};
89+
template <> constexpr auto flow::log_env<"C"> = user1_log_env{};
8790

8891
TEST_CASE("default log spec for step will use overridden log spec for flow",
8992
"[flow_custom_log_levels]") {

0 commit comments

Comments
 (0)