]> git.proxmox.com Git - ceph.git/blob - ceph/src/crimson/os/seastore/logging.h
import quincy beta 17.1.0
[ceph.git] / ceph / src / crimson / os / seastore / logging.h
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
3
4 #pragma once
5
6 #include <fmt/format.h>
7
8 #include "crimson/common/log.h"
9
10 #define SET_SUBSYS(subname_) static constexpr auto SOURCE_SUBSYS = ceph_subsys_##subname_
11 #define LOCAL_LOGGER crimson::get_logger(SOURCE_SUBSYS)
12 #define LOGGER(subname_) crimson::get_logger(ceph_subsys_##subname_)
13 #define LOG_PREFIX(x) constexpr auto FNAME = #x
14
15 #ifdef NDEBUG
16
17 #define LOG(level_, MSG, ...) \
18 LOCAL_LOGGER.log(level_, "{}: " MSG, FNAME , ##__VA_ARGS__)
19 #define LOGT(level_, MSG, t, ...) \
20 LOCAL_LOGGER.log(level_, "{}({}): " MSG, FNAME, (void*)&t , ##__VA_ARGS__)
21 #define SUBLOG(subname_, level_, MSG, ...) \
22 LOGGER(subname_).log(level_, "{}: " MSG, FNAME , ##__VA_ARGS__)
23 #define SUBLOGT(subname_, level_, MSG, t, ...) \
24 LOGGER(subname_).log(level_, "{}({}): " MSG, FNAME, (void*)&t , ##__VA_ARGS__)
25
26 #else
27
28 // do compile-time format string validation
29 using namespace fmt::literals;
30 template<seastar::log_level lv>
31 void _LOG(seastar::logger& logger, std::string_view info) {
32 logger.log(lv, info.data());
33 }
34
35 #define LOG(level_, MSG, ...) \
36 _LOG<level_>(LOCAL_LOGGER, "{}: " MSG ## _format(FNAME , ##__VA_ARGS__))
37 #define LOGT(level_, MSG, t_, ...) \
38 _LOG<level_>(LOCAL_LOGGER, "{}({}): " MSG ## _format(FNAME, (void*)&t_ , ##__VA_ARGS__))
39 #define SUBLOG(subname_, level_, MSG, ...) \
40 _LOG<level_>(LOGGER(subname_), "{}: " MSG ## _format(FNAME , ##__VA_ARGS__))
41 #define SUBLOGT(subname_, level_, MSG, t_, ...) \
42 _LOG<level_>(LOGGER(subname_), "{}({}): " MSG ## _format(FNAME, (void*)&t_ , ##__VA_ARGS__))
43
44 #endif
45
46 #define TRACE(...) LOG(seastar::log_level::trace, __VA_ARGS__)
47 #define TRACET(...) LOGT(seastar::log_level::trace, __VA_ARGS__)
48 #define SUBTRACE(subname_, ...) SUBLOG(subname_, seastar::log_level::trace, __VA_ARGS__)
49 #define SUBTRACET(subname_, ...) SUBLOGT(subname_, seastar::log_level::trace, __VA_ARGS__)
50
51 #define DEBUG(...) LOG(seastar::log_level::debug, __VA_ARGS__)
52 #define DEBUGT(...) LOGT(seastar::log_level::debug, __VA_ARGS__)
53 #define SUBDEBUG(subname_, ...) SUBLOG(subname_, seastar::log_level::debug, __VA_ARGS__)
54 #define SUBDEBUGT(subname_, ...) SUBLOGT(subname_, seastar::log_level::debug, __VA_ARGS__)
55
56 #define INFO(...) LOG(seastar::log_level::info, __VA_ARGS__)
57 #define INFOT(...) LOGT(seastar::log_level::info, __VA_ARGS__)
58 #define SUBINFO(subname_, ...) SUBLOG(subname_, seastar::log_level::info, __VA_ARGS__)
59 #define SUBINFOT(subname_, ...) SUBLOGT(subname_, seastar::log_level::info, __VA_ARGS__)
60
61 #define WARN(...) LOG(seastar::log_level::warn, __VA_ARGS__)
62 #define WARNT(...) LOGT(seastar::log_level::warn, __VA_ARGS__)
63 #define SUBWARN(subname_, ...) SUBLOG(subname_, seastar::log_level::warn, __VA_ARGS__)
64 #define SUBWARNT(subname_, ...) SUBLOGT(subname_, seastar::log_level::warn, __VA_ARGS__)
65
66 #define ERROR(...) LOG(seastar::log_level::error, __VA_ARGS__)
67 #define ERRORT(...) LOGT(seastar::log_level::error, __VA_ARGS__)
68 #define SUBERROR(subname_, ...) SUBLOG(subname_, seastar::log_level::error, __VA_ARGS__)
69 #define SUBERRORT(subname_, ...) SUBLOGT(subname_, seastar::log_level::error, __VA_ARGS__)