有关在EMP中使用日志分析工具(gardener.jar)的说明
来源:互联网 发布:unity3d发布到网页 编辑:程序博客网 时间:2024/06/07 14:32
有关在EMP中使用日志分析工具(gardener.jar)的说明
(Gardener工具源自网银产品的日志规范,用于分析交易访问日志。通过此工具可分析出一笔交易的关键路径,及在每路径上的耗时,具体内容不属于本贴关注范围。)
在EMP 2.1版本(EMP 20090313之后)中已经提供了对该功能的支持,如要在应用中使用该功能,需要遵循以下步骤:
1.启动交易耗时记录:
(如不作该项处理,则在EMP中不进行交易耗时记录,所以对于正在应用emp且不关注本项功能的项目没有任何影响)
在应用的web.xml中,增加下面的定义:
<context-param>
<param-name>timeRecorderImplClass</param-name>
<param-value>com.ecc.emp.timerecorder.GardenerRecorderImpl</param-value>
</context-param>
2.定义在哪个环境统计交易耗时:
在empServletContext.xml文件中,增加下面的定义
<accessManager id="..." ...>
<accessController id="aController" class="com.ecc.emp.timerecorder.TimerRecorderAccessController" txcodeField="TXCODE">
</accessController>
</accessManager>
目前做法是通过EMP的access controller机制实现耗时统计,可支持一般的BS应用,以及HTTP的渠道接入应用,但不支持TCPIP的渠道接入应用。
3.在logging.xml文件中增加以下定义(这是gardener的要求):
<appender name="TRANSACCESS_FILE" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${ROOTPATH}WEB-INF/logs/emp_gardner.log" />
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<param name="Append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ISO8601} - %m%n" />
</layout>
</appender>
<category name="EBANK.transAccess" additivity="false">
<priority value="info" />
<appender-ref ref="TRANSACCESS_FILE" />
</category>
由于gardener工具,要求输出日志行包括,分行号、交易码等信息,而EMP这种纯技术平台无法提供这些内容,所以在项目中通常需要重新撰写access controller来实现。
现将EMP的默认实现代码,提供如下,大家可以依项目情况来进行扩展。
===============================================================
package com.ecc.emp.timerecorder;
import java.util.HashMap;
import javax.servlet.http.HttpServletRequest;
import com.ecc.emp.accesscontrol.AccessController;
import com.ecc.emp.core.Context;
import com.ecc.emp.core.EMPConstance;
import com.ecc.emp.core.EMPException;
public class TimerRecorderAccessController implements AccessController {
private String txcodeField = "txcode";
private String branchCodeField = "branchCode";
private String sequenceNoField = "sequenceNo";
private String errCodeField = "errCode";
private String hostErrCodeField = "hostErrCode";
public void beginAccess(Object accessInfo) {
EMPTimerRecorder.setStart(accessInfo);
}
public Object checkAccess(Context context, Object requestObj,
String actionId) throws EMPException {
return requestObj;
}
public void endAccess(Object accessInfo, long beginTimeStamp) {
Context context = (Context) ((HttpServletRequest) accessInfo)
.getAttribute(EMPConstance.ATTR_CONTEXT);
HashMap map = new HashMap();
String fieldValue = null;
try {
fieldValue = (String)context.get(txcodeField);
} catch (RuntimeException e) {
}
if (fieldValue == null) {
fieldValue = "";
}
map.put("txcode", fieldValue);
fieldValue = null;
try {
fieldValue = (String)context.get(branchCodeField);
} catch (RuntimeException e) {
}
if (fieldValue == null) {
fieldValue = "";
}
map.put("branchCode", fieldValue);
fieldValue = null;
try {
fieldValue = (String)context.get(sequenceNoField);
} catch (RuntimeException e) {
}
if (fieldValue == null) {
fieldValue = "";
}
map.put("sequenceNo", fieldValue);
fieldValue = null;
try {
fieldValue = (String)context.get(errCodeField);
} catch (RuntimeException e) {
}
if (fieldValue == null) {
fieldValue = "";
}
map.put("errCode", fieldValue);
fieldValue = null;
try {
fieldValue = (String)context.get(hostErrCodeField);
} catch (RuntimeException e) {
}
if (fieldValue == null) {
fieldValue = "";
}
map.put("hostErrCode", fieldValue);
EMPTimerRecorder.logEnd(accessInfo, map);
}
public void setBranchCodeField(String branchCodeField) {
this.branchCodeField = branchCodeField;
}
public void setErrCodeField(String errCodeField) {
this.errCodeField = errCodeField;
}
public void setHostErrCodeField(String hostErrCodeField) {
this.hostErrCodeField = hostErrCodeField;
}
public void setSequenceNoField(String sequenceNoField) {
this.sequenceNoField = sequenceNoField;
}
public void setTxcodeField(String txcodeField) {
this.txcodeField = txcodeField;
}
}
long beginTime=System.currentTimeMillis();
....
try{
...
}catch(...){
...
}finally{
long timeCost=System.currentTimeMillis()-beginTime;
EMPTimerRecorder.addThreadValue(EMPTimerRecorder.TYPE_COMM, timeCost);//可选计时分类还包括TYPE_DBACCESS,TYPE_COMM,TYPE_JSP
}
- 有关在EMP中使用日志分析工具(gardener.jar)的说明
- java中JSONObject与JSONArray的使用详细说明及有关JSON的工具类
- java中JSONObject与JSONArray的使用详细说明及有关JSON的工具类
- 有关eclipse中的jar包的说明
- 有关EMP压力测试的常见问题
- oracle 有关emp表的练习题
- oracle 有关emp表的练习题
- [转载]oracle 有关emp表的练习题
- oracle 有关emp表的练习题
- Oracle日志分析工具的使用
- oracle中exp/emp使用
- java中jar工具的使用- -
- java中jar工具的使用 [转]
- java中jar工具的使用 [转]
- Android中asm.jar工具的使用
- 网站运维工具使用iis日志分析工具分析iis日志(iis日志的配置)
- 网站运维工具使用iis日志分析工具分析iis日志(iis日志的配置)
- 使用python制作简单的日志以及日志分析工具
- 通过回调方法初始化Service
- 如何在EMP2.2版本中使用pop标签
- 如何在EMP2.2版本的前端列表组件中处理单、复选框
- JBuilder+Hibernate+Tomcat快速入门
- 如何处理事务
- 有关在EMP中使用日志分析工具(gardener.jar)的说明
- 计算大数的阶乘(ZZ)
- 有关EMP压力测试的常见问题
- 今天又被k掉了
- IEnumerable与IEnumerator区别
- JDBC连接sql server2000数据库详解
- 一个简单的杨辉三角,只能用1维数组来完成~!
- jdbc连接sql server2000数据库问题总结
- Java中的Collection类