Wildmeshing Toolkit
Loading...
Searching...
No Matches
Logger.hpp
1#pragma once
2
3#include <mutex>
4
5// clang-format off
6#include <wmtk/utils/DisableWarnings.hpp>
7#include <spdlog/fmt/bundled/ranges.h>
8#include <spdlog/fmt/ostr.h>
9#include <spdlog/spdlog.h>
10#include <wmtk/utils/EnableWarnings.hpp>
11// clang-format on
12
13namespace wmtk {
14
15namespace detail {
16// Component entry points share legacy process-wide loggers. Serialize their setup and
17// temporarily use console sinks for a memory call, including messages from worker threads.
18// The lock is held for the whole component call, file calls included: component calls in one
19// process never run concurrently (see docs/in-memory-io.md).
21{
22public:
23 explicit ComponentLoggerScope(bool memory);
25
26private:
27 std::unique_lock<std::recursive_mutex> m_lock;
28 std::shared_ptr<spdlog::logger> m_previous, m_previous_opt;
29 bool m_memory;
30};
31} // namespace detail
32
33bool has_user_overloaded_logger_level();
39spdlog::logger& logger();
40
46spdlog::logger& opt_logger();
47
54void set_logger(std::shared_ptr<spdlog::logger> logger);
55
61void set_file_logger(const std::string& log_file);
62
69void set_opt_logger(std::shared_ptr<spdlog::logger> logger);
70
71[[noreturn]] void log_and_throw_error(const std::string& msg);
72
73template <typename... Args>
74[[noreturn]] void log_and_throw_error(const std::string& msg, const Args&... args)
75{
76 log_and_throw_error(fmt::format(fmt::runtime(msg), args...));
77}
78} // namespace wmtk
Definition Logger.hpp:21