log内容构造
如osd的一条log
分别表示 时间戳 线程id 日志等级 子模块 内容实体
剖析源码实现
每条log都是由一个Entry构成
定义在src/log/entry.h中
Entry(short pr, short sub) :
m_stamp(clock().now()), // 打印日志时的时间戳
m_thread(pthread_self()), // 打印日志的线程ID
m_prio(pr), // 日志的优先级值(值越大,优先级越低)
m_subsys(sub) // 子模块ID,如osd
{}
如
ldout是带前缀的dout_impl
定义在src/common/dout.h中
#define ldout(cct, v) dout_impl(cct, dout_subsys, v) dout_prefix
dout和ldout类似,也是带前缀的dout_impl,只有个别模块有使用,如src/mds/MDBalancer.cc中
#undef dout
#define dout(lvl) \
do {\
auto subsys = ceph_subsys_mds;\
if ((dout_context)->_conf->subsys.should_gather(ceph_subsys_mds_balancer, lvl)) {\
subsys = ceph_subsys_mds_balancer;\
}\
dout_impl(dout_context, ceph::dout::need_dynamic(subsys), lvl) dout_prefix
#undef dendl
#define dendl dendl_impl; } while (0)
学习链接:https://daimajiaoliu.com/daima/485fd296c900408