# Cat Client Java Cat Java 客户端支持 JDK 1.6+ ## 安装 ### 通过 Maven 添加依赖 ```xml com.dianping.cat cat-client ${cat.version} ``` ## 初始化 首先你需要创建 `/data/appdatas/cat` 目录,并拥有读写权限 (0644)。建议同时创建 `/data/applogs/cat` 目录用于存放日志,这将在排查问题时非常有用。 然后创建一个配置文件 `/data/appdatas/cat/client.xml`,内容如下: ```xml ``` > 在复制粘贴文件内容后,不要忘记把 `` 改成你自己的IP! 所有准备工作都完成之后, 你必须在你的项目模块下配置规范的项目名,统一项目名以文件的形式放在模块指定的目录下. 你需要创建 `src/main/resources/META-INF/app.properties` 文件, 添加如下内容: ``` app.name={appkey} ``` > appkey 只能包含英文字母 (a-z, A-Z)、数字 (0-9)、下划线 (\_) 和中划线 (-) ## Quickstart ``` Transaction t = Cat.newTransaction("URL", "pageName"); try { Cat.logEvent("URL.Server", "serverIp", Event.SUCCESS, "ip=${serverIp}"); Cat.logMetricForCount("metric.key"); Cat.logMetricForDuration("metric.key", 5); yourBusiness(); t.setStatus(Transaction.SUCCESS); } catch (Exception e) { t.setStatus(e); Cat.logError(e); } finally { t.complete(); } ``` ## Api List ### Transaction 记录一段事务的执行过程。 > 为了避免忘记关闭 Transaction, 建议在 finally 代码块中执行 complete。 ``` Transaction t = Cat.newTransaction("URL", "pageName"); try { yourBusiness(); t.setStatus(Transaction.SUCCESS); } catch (Exception e) { t.setStatus(e); Cat.logError(e); } finally { t.complete(); } ``` 我们提供了一系列 API 来对 Transaction 进行修改。 * setDurationInMillis * setTimestamp * addData 这些 API 可以被很方便的使用,参考如下代码: ``` Transaction t = Cat.newTransaction("URL", "pageName"); try { t.setDurationInMillis(1000); t.setTimestamp(System.currentTimeMillis()); t.setDurationStart(System.currentTimeMillis() - 1000); t.addData("content"); t.setStatus(Transaction.SUCCESS); } catch (Exception e) { t.setStatus(e); Cat.logError(e); } finally { t.complete(); } ``` 在使用 Transaction 提供的 API 时,你可能需要注意以下几点: 1. `Duration` 在 Transaction 结束的时候会被自动计算(当前时间 - 开始时间) 2. 尽管`timestamp`默认是和`durationStart`相同的,你仍然可以复写它。 3. `durationStart`和`timestamp`是不同的,前者代表 Transaction 的开始时间,后者代表 Message 的创建时间(Transaction 也是一种 Message)。 4. 当你指定了 `duration` 时,`durationStart` 就不起作用了。 5. 你可以调用 `addData` 多次,他们会通过 `&` 连接。 ### Event #### Cat.logEvent 记录某种事件的发生。 ``` # Log a event with success status and empty data. Cat.logEvent("URL.Server", "serverIp"); # Log a event with success status and additional data. Cat.logEvent("URL.Server", "serverIp", Event.SUCCESS, "ip=${serverIp}"); ``` #### Cat.logError 记录应用发生的异常。 ``` # Error traces will be collected when you use it in an except block. try { 1 / 0; } catch (Exception e) { Cat.logError(e); } # customize your own error traces through the 1nd parameter which is optional. Cat.logError("this is my error stack info", e) ``` ### Metric 记录业务指标的统计总和以及平均值。 ``` # Counter Cat.logMetricForCount("metric.key"); Cat.logMetricForCount("metric.key", 3); # Duration Cat.logMetricForDuration("metric.key", 5); ``` 我们每秒会聚合 metric。 举例来说,如果你在同一秒调用 count 三次(相同的 name),我们会累加他们的值,并且一次性上报给服务端。 在 `duration` 的情况下,我们用平均值来取代累加值。 ## 集成 ### 日志组件集成 [log4j](./../../integration/log4j/README.md) [log4j2](./../../integration/log4j2/README.md) [logback](./../../integration/logback/README.md) ### URL监控集成 [URL monitoring integration with web.xml](./../../integration/URL/README.md) [URL monitoring integration with springboot](./../../integration/spring-boot/README.md) ### 更多集成方案 更多集成方案参考项目根目录下integration目录。