package com.taobao.tddl.monitor.stat; /** * 统计信息的日志输出接口。 <br /> * 工具的功能是对相同目标的统计数据合并输出, 计算出 min/max/avg, 定时刷出到日志。 <br /> * * <pre> * StatLogWriter.write( * new Object[] { key1, key2, key3, ... }, // 统计的目标 * number1, number2, ...); // 统计值 * * StatLogWriter.write( * new Object[] { key1, key2, key3, ... }, // 统计的目标 * new Object[] { obj1, obj2, obj3, ... }, // 实际的输出项 * number1, number2, ...); // 统计值 * </pre> * * @author changyuan.lh */ public abstract class StatLogWriter { public final void write(Object[] keys, long... values) { write(keys, keys, values); } /** * 统计信息分成三部分:汇总目标/key, 统计目标信息/fields, 数据/values. 首先组件会根据汇总目标/key * 在内存中汇集日志数据以减少日志量, 然后刷出到日志文件。 * * @param keys 汇总的目标, 通常与最后输出到日志的统计目标信息/fields 相同。 * @param fields 日志记录字段, 代表最后输出到日志的内容和顺序。内容至少包含汇总目标/key. * @param values 输出的统计数据, 约定第一个值是数量, 后面的是统计值 (RT, 并发量, etc). */ public abstract void write(Object[] keys, Object[] fields, // NL long... values); /* 多个统计值的简便调用入口 */ public final void log(Object key, long... values) { Object[] keys = new Object[] { key }; write(keys, keys, values); } public final void log2(Object key1, Object key2, long... values) { Object[] keys = new Object[] { key1, key2 }; write(keys, keys, values); } public final void log3(Object key1, Object key2, Object key3, long... values) { Object[] keys = new Object[] { key1, key2, key3 }; write(keys, keys, values); } /* 次数/统计值的简便调用入口 */ public final void stat(Object key, long value) { Object[] keys = new Object[] { key }; write(keys, keys, new long[] { 1L, value }); } public final void stat(Object key, long count, long value) { Object[] keys = new Object[] { key }; write(keys, keys, new long[] { count, value }); } public final void stat(Object key1, Object key2, long value) { Object[] keys = new Object[] { key1, key2 }; write(keys, keys, new long[] { 1L, value }); } public final void stat(Object key1, Object key2, long count, long value) { Object[] keys = new Object[] { key1, key2 }; write(keys, keys, new long[] { count, value }); } public final void stat(Object key1, Object key2, Object key3, long value) { Object[] keys = new Object[] { key1, key2, key3 }; write(keys, keys, new long[] { 1L, value }); } public final void stat(Object key1, Object key2, Object key3, // NL long count, long value) { Object[] keys = new Object[] { key1, key2, key3 }; write(keys, keys, new long[] { count, value }); } }