// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- // vim: ts=8 sw=2 smarttab #ifndef CEPH_LOG_SUBSYSTEMS #define CEPH_LOG_SUBSYSTEMS #include #include #include "include/assert.h" namespace ceph { namespace logging { struct Subsystem { int log_level, gather_level; std::string name; Subsystem() : log_level(0), gather_level(0) {} }; class SubsystemMap { std::vector m_subsys; unsigned m_max_name_len; friend class Log; public: SubsystemMap() : m_max_name_len(0) {} size_t get_num() const { return m_subsys.size(); } int get_max_subsys_len() const { return m_max_name_len; } void add(unsigned subsys, std::string name, int log, int gather); void set_log_level(unsigned subsys, int log); void set_gather_level(unsigned subsys, int gather); int get_log_level(unsigned subsys) const { if (subsys >= m_subsys.size()) subsys = 0; return m_subsys[subsys].log_level; } int get_gather_level(unsigned subsys) const { if (subsys >= m_subsys.size()) subsys = 0; return m_subsys[subsys].gather_level; } const std::string& get_name(unsigned subsys) const { if (subsys >= m_subsys.size()) subsys = 0; return m_subsys[subsys].name; } bool should_gather(unsigned sub, int level) { assert(sub < m_subsys.size()); return level <= m_subsys[sub].gather_level || level <= m_subsys[sub].log_level; } }; } } #endif