1. Client端主要用来采集各种消息,本文采用官方的例子
Transaction t = Cat.newTransaction("your transaction type", "your transaction name");
try {
yourBusinessOperation();
Cat.logEvent("your event type", "your event name", Event.SUCCESS, "keyValuePairs")
t.setStatus(Transaction.SUCCESS);
} catch (Exception e) {
Cat.logError(e);//用log4j记录系统异常,以便在Logview中看到此信息
t.setStatus(e);
throw e;
(CAT所有的API都可以单独使用,也可以组合使用,比如Transaction中嵌套Event或者Metric。)
(注意如果这里希望异常继续向上抛,需要继续向上抛出,往往需要抛出异常,让上层应用知道。)
(如果认为这个异常在这边可以被吃掉,则不需要在抛出异常。)
} finally {
t.complete();
}
首先需要初始化容器,Cat采用的容器是PlexusContainer,加载配置文件/META-INF/plexus/plexus.xml,初始化完后加载对应的模块CatClientModule,加载META-INF/plexus/components-cat-client.xml对应的配置,各个类的属性通过@Inject标签注入
private static void checkAndInitialize() {
if (!s_init) {
synchronized (s_instance) {
if (!s_init) {
initialize(new File(getCatHome(), "client.xml"));
log("WARN", "Cat is lazy initialized!");
s_init = true;
}
}
}
}
// this should be called during application initialization time
public static void initialize(File configFile) {
PlexusContainer container = ContainerLoader.getDefaultContainer();
initialize(container, configFile);
}
public static void initialize(PlexusContainer container, File configFile) {
ModuleContext ctx = new DefaultModuleContext(container);
Module module = ctx.lookup(Module.class, CatClientModule.ID);
if (!module.isInitialized()) {
ModuleInitializer initializer = ctx.lookup(ModuleInitializer.class);
ctx.setAttribute("cat-client-config-file", configFile);
initializer.execute(ctx, module);
}
}
初始化毫秒获取器MilliSecondTimer,设置线程监听器CatThreadListener,初始化DefaultMessageProducer,PlainTextMessageCodec编解码器,通过ID = "plain-text"定位接口实现类,初始化DefaultMessageStatistics数据统计类
protected void execute(final ModuleContext ctx) throws Exception {
ctx.info("Current working directory is " + System.getProperty("user.dir"));
// initialize milli-second resolution level timer
MilliSecondTimer.initialize();
// tracking thread start/stop
Threads.addListener(new CatThreadListener(ctx));
// warm up Cat
Cat.getInstance().setContainer(((DefaultModuleContext) ctx).getContainer());
// bring up TransportManager
ctx.