From 3ae7e4d42eae2c261dfb5930ad20b2d453fb735a Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Wed, 25 Jan 2023 04:53:54 +0000 Subject: [PATCH] crimson/common: move log macros to log.h from os/seastore/logging.h These have been handy in imposing uniformity on seastore logging, let's start using them in PG/OSD code. Signed-off-by: Samuel Just --- src/common/dout.h | 8 ++++ src/crimson/common/log.h | 64 +++++++++++++++++++++++++++++++ src/crimson/os/seastore/logging.h | 19 --------- 3 files changed, 72 insertions(+), 19 deletions(-) diff --git a/src/common/dout.h b/src/common/dout.h index 87ff79c3be0f0..4cd60efff8fef 100644 --- a/src/common/dout.h +++ b/src/common/dout.h @@ -52,6 +52,14 @@ public: virtual ~DoutPrefixProvider() {} }; +inline std::ostream &operator<<( + std::ostream &lhs, const DoutPrefixProvider &dpp) { + return dpp.gen_prefix(lhs); +} +#if FMT_VERSION >= 90000 +template <> struct fmt::formatter : fmt::ostream_formatter {}; +#endif + // a prefix provider with empty prefix class NoDoutPrefix : public DoutPrefixProvider { CephContext *const cct; diff --git a/src/crimson/common/log.h b/src/crimson/common/log.h index 1362869bb589b..86c3c17fc79ca 100644 --- a/src/crimson/common/log.h +++ b/src/crimson/common/log.h @@ -3,7 +3,9 @@ #pragma once +#include #include + #include "common/subsys_types.h" namespace crimson { @@ -22,3 +24,65 @@ static inline seastar::log_level to_log_level(int level) { } } } + +/* Logging convenience macros + * + * The intention here is to standardize prefixing log lines with the function name + * and a context prefix (like the operator<< for the PG). Place + * + * SET_SUBSYS(osd); + * + * at the top of the file to declare the log lines within the file as being (in this case) + * in the osd subsys. At the beginning of each method/function, add + * + * LOG_PREFIX(Class::method_name) + * + * to set the FNAME symbol to Class::method_name. In order to use the log macros + * within lambdas, capture FNAME by value. + * + * Log lines can then be declared using the appropriate macro below. + */ + +#define SET_SUBSYS(subname_) static constexpr auto SOURCE_SUBSYS = ceph_subsys_##subname_ +#define LOCAL_LOGGER crimson::get_logger(SOURCE_SUBSYS) +#define LOGGER(subname_) crimson::get_logger(ceph_subsys_##subname_) +#define LOG_PREFIX(x) constexpr auto FNAME = #x + +#define LOG(level_, MSG, ...) \ + LOCAL_LOGGER.log(level_, "{}: " MSG, FNAME , ##__VA_ARGS__) +#define SUBLOG(subname_, level_, MSG, ...) \ + LOGGER(subname_).log(level_, "{}: " MSG, FNAME , ##__VA_ARGS__) + +#define TRACE(...) LOG(seastar::log_level::trace, __VA_ARGS__) +#define SUBTRACE(subname_, ...) SUBLOG(subname_, seastar::log_level::trace, __VA_ARGS__) + +#define DEBUG(...) LOG(seastar::log_level::debug, __VA_ARGS__) +#define SUBDEBUG(subname_, ...) SUBLOG(subname_, seastar::log_level::debug, __VA_ARGS__) + +#define INFO(...) LOG(seastar::log_level::info, __VA_ARGS__) +#define SUBINFO(subname_, ...) SUBLOG(subname_, seastar::log_level::info, __VA_ARGS__) + +#define WARN(...) LOG(seastar::log_level::warn, __VA_ARGS__) +#define SUBWARN(subname_, ...) SUBLOG(subname_, seastar::log_level::warn, __VA_ARGS__) + +#define ERROR(...) LOG(seastar::log_level::error, __VA_ARGS__) +#define SUBERROR(subname_, ...) SUBLOG(subname_, seastar::log_level::error, __VA_ARGS__) + +// *DPP macros are intended to take DoutPrefixProvider implementations, but anything with +// an operator<< will work as a prefix + +#define SUBLOGDPP(subname_, level_, MSG, dpp, ...) \ + LOGGER(subname_).log(level_, "{} {}: " MSG, dpp, FNAME , ##__VA_ARGS__) +#define SUBTRACEDPP(subname_, ...) SUBLOGDPP(subname_, seastar::log_level::trace, __VA_ARGS__) +#define SUBDEBUGDPP(subname_, ...) SUBLOGDPP(subname_, seastar::log_level::debug, __VA_ARGS__) +#define SUBINFODPP(subname_, ...) SUBLOGDPP(subname_, seastar::log_level::info, __VA_ARGS__) +#define SUBWARNDPP(subname_, ...) SUBLOGDPP(subname_, seastar::log_level::warn, __VA_ARGS__) +#define SUBERRORDPP(subname_, ...) SUBLOGDPP(subname_, seastar::log_level::error, __VA_ARGS__) + +#define LOGDPP(level_, MSG, dpp, ...) \ + LOCAL_LOGGER.log(level_, "{} {}: " MSG, dpp, FNAME , ##__VA_ARGS__) +#define TRACEDPP(...) LOGDPP(seastar::log_level::trace, __VA_ARGS__) +#define DEBUGDPP(...) LOGDPP(seastar::log_level::trace, __VA_ARGS__) +#define INFODPP(...) LOGDPP(seastar::log_level::trace, __VA_ARGS__) +#define WARNDPP(...) LOGDPP(seastar::log_level::trace, __VA_ARGS__) +#define ERRORDPP(...) LOGDPP(seastar::log_level::trace, __VA_ARGS__) diff --git a/src/crimson/os/seastore/logging.h b/src/crimson/os/seastore/logging.h index a5df4c9797568..ec9b7df5ed181 100644 --- a/src/crimson/os/seastore/logging.h +++ b/src/crimson/os/seastore/logging.h @@ -7,41 +7,22 @@ #include "crimson/common/log.h" -#define SET_SUBSYS(subname_) static constexpr auto SOURCE_SUBSYS = ceph_subsys_##subname_ -#define LOCAL_LOGGER crimson::get_logger(SOURCE_SUBSYS) -#define LOGGER(subname_) crimson::get_logger(ceph_subsys_##subname_) -#define LOG_PREFIX(x) constexpr auto FNAME = #x - -#define LOG(level_, MSG, ...) \ - LOCAL_LOGGER.log(level_, "{}: " MSG, FNAME , ##__VA_ARGS__) #define LOGT(level_, MSG, t, ...) \ LOCAL_LOGGER.log(level_, "{} {}: " MSG, (void*)&t, FNAME , ##__VA_ARGS__) -#define SUBLOG(subname_, level_, MSG, ...) \ - LOGGER(subname_).log(level_, "{}: " MSG, FNAME , ##__VA_ARGS__) #define SUBLOGT(subname_, level_, MSG, t, ...) \ LOGGER(subname_).log(level_, "{} {}: " MSG, (void*)&t, FNAME , ##__VA_ARGS__) -#define TRACE(...) LOG(seastar::log_level::trace, __VA_ARGS__) #define TRACET(...) LOGT(seastar::log_level::trace, __VA_ARGS__) -#define SUBTRACE(subname_, ...) SUBLOG(subname_, seastar::log_level::trace, __VA_ARGS__) #define SUBTRACET(subname_, ...) SUBLOGT(subname_, seastar::log_level::trace, __VA_ARGS__) -#define DEBUG(...) LOG(seastar::log_level::debug, __VA_ARGS__) #define DEBUGT(...) LOGT(seastar::log_level::debug, __VA_ARGS__) -#define SUBDEBUG(subname_, ...) SUBLOG(subname_, seastar::log_level::debug, __VA_ARGS__) #define SUBDEBUGT(subname_, ...) SUBLOGT(subname_, seastar::log_level::debug, __VA_ARGS__) -#define INFO(...) LOG(seastar::log_level::info, __VA_ARGS__) #define INFOT(...) LOGT(seastar::log_level::info, __VA_ARGS__) -#define SUBINFO(subname_, ...) SUBLOG(subname_, seastar::log_level::info, __VA_ARGS__) #define SUBINFOT(subname_, ...) SUBLOGT(subname_, seastar::log_level::info, __VA_ARGS__) -#define WARN(...) LOG(seastar::log_level::warn, __VA_ARGS__) #define WARNT(...) LOGT(seastar::log_level::warn, __VA_ARGS__) -#define SUBWARN(subname_, ...) SUBLOG(subname_, seastar::log_level::warn, __VA_ARGS__) #define SUBWARNT(subname_, ...) SUBLOGT(subname_, seastar::log_level::warn, __VA_ARGS__) -#define ERROR(...) LOG(seastar::log_level::error, __VA_ARGS__) #define ERRORT(...) LOGT(seastar::log_level::error, __VA_ARGS__) -#define SUBERROR(subname_, ...) SUBLOG(subname_, seastar::log_level::error, __VA_ARGS__) #define SUBERRORT(subname_, ...) SUBLOGT(subname_, seastar::log_level::error, __VA_ARGS__) -- 2.39.5