4#ifndef __UTILS_LOGGER_H__
5#define __UTILS_LOGGER_H__
7#include "zrythm-config.h"
9#include "utils/format.h"
10#include "utils/types.h"
12#include "juce_wrapper.h"
13#include <spdlog/spdlog.h>
23 void init_sinks (
bool for_testing);
25 std::vector<Utf8String>
26 get_last_log_entries (
size_t count,
bool formatted)
const;
34 virtual std::pair<fs::path, fs::path>
38# pragma GCC diagnostic push
39# pragma GCC diagnostic ignored "-Wnull-dereference"
41 [[nodiscard]]
const std::shared_ptr<spdlog::logger> &get_logger ()
const
46# pragma GCC diagnostic pop
49 virtual bool need_backtrace ()
const = 0;
51 virtual fs::path get_log_file_path ()
const = 0;
54 std::shared_ptr<spdlog::logger> logger_;
74 Logger (LoggerType type);
76 std::pair<fs::path, fs::path>
79 bool need_backtrace ()
const override;
81 [[nodiscard]] fs::path get_log_file_path ()
const override;
92 std::pair<fs::path, fs::path>
95 bool need_backtrace ()
const override;
97 fs::path get_log_file_path ()
const override;
103 static void set_logger (std::shared_ptr<ILogger> logger)
105 instance ().logger_ = std::move (logger);
110 auto &logger_provider = instance ();
111 if (!logger_provider.logger_) [[unlikely]]
113 logger_provider.logger_ = std::make_shared<TestLogger> ();
115 return *logger_provider.logger_;
118 static bool has_logger () {
return instance ().logger_ !=
nullptr; };
127 std::shared_ptr<ILogger> logger_;
130#define LOGGER_INSTANCE zrythm::utils::LoggerProvider::logger ().get_logger ()
131#define z_warning(...) SPDLOG_LOGGER_WARN (LOGGER_INSTANCE, __VA_ARGS__)
132#define z_error(...) SPDLOG_LOGGER_ERROR (LOGGER_INSTANCE, __VA_ARGS__)
133#define z_critical(...) SPDLOG_LOGGER_CRITICAL (LOGGER_INSTANCE, __VA_ARGS__)
134#define z_trace(...) SPDLOG_LOGGER_TRACE (LOGGER_INSTANCE, __VA_ARGS__)
135#define z_debug(...) SPDLOG_LOGGER_DEBUG (LOGGER_INSTANCE, __VA_ARGS__)
136#define z_info(...) SPDLOG_LOGGER_INFO (LOGGER_INSTANCE, __VA_ARGS__)
141#define z_return_val_if_fail(cond, val) \
142 if (!(cond)) [[unlikely]] \
144 z_error (format_str ("Assertion failed: {}", #cond)); \
151#define z_return_if_fail(cond) z_return_val_if_fail (cond, )
156#define z_return_val_if_reached(val) \
158 z_error ("This code should not be reached"); \
165#define z_return_if_reached() z_return_val_if_reached ()
167#define z_warn_if_fail(cond) \
168 if (!(cond)) [[unlikely]] \
170 z_warning (format_str ("Assertion failed: {}", #cond)); \
173#define z_warn_if_reached() z_warning ("This code should not be reached")
double last_bt_time_
Last timestamp a backtrace was obtained.
virtual std::pair< fs::path, fs::path > generate_compresed_file(fs::path &dir, fs::path &path) const =0
Generates a compressed log file (for sending with bug reports).
std::pair< fs::path, fs::path > generate_compresed_file(fs::path &dir, fs::path &path) const override
Generates a compressed log file (for sending with bug reports).
std::pair< fs::path, fs::path > generate_compresed_file(fs::path &dir, fs::path &path) const override
Generates a compressed log file (for sending with bug reports).