]> git.proxmox.com Git - ceph.git/blame - ceph/src/crimson/os/seastore/logging.h
import quincy beta 17.1.0
[ceph.git] / ceph / src / crimson / os / seastore / logging.h
CommitLineData
20effc67
TL
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
29using namespace fmt::literals;
30template<seastar::log_level lv>
31void _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__)