All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.alogic.tracer.StackTracer Maven / Gradle / Ivy

There is a newer version: 1.6.17
Show newest version
package com.alogic.tracer;

import java.util.concurrent.ConcurrentHashMap;

import com.alogic.tlog.TLog;
import com.anysoft.util.Properties;

/**
 * 调用栈追踪
 * 
 * @author duanyy
 * @since 1.6.5.3
 * 
 * @version 1.6.5.11 [20160603 duanyy] 
* - tracelog增加type字段
* * @version 1.6.7.1 [20170117 duanyy]
* - trace日志调用链中的调用次序采用xx.xx.xx.xx字符串模式
* * @version 1.6.7.3 [20170118 duanyy]
* - trace日志的时长单位改为ns
* - 新增com.alogic.tlog,替代com.alogic.tracer.log包;
* * @version 1.6.7.21 [20170303 duanyy]
* - TLog增加parameter字段,便于调用者记录个性化参数
*/ public class StackTracer extends Tracer.Abstract{ /** * 以线程为单位集合的上下文集合 */ protected ConcurrentHashMap contexts = new ConcurrentHashMap(); @Override public TraceContext startProcedure() { long thread = Thread.currentThread().getId(); TraceContext current = contexts.get(thread); if (current == null){ //创建一个新的 current = new TraceContext.Default(); }else{ current = current.newChild(); } contexts.put(thread, current); return current; } @Override public TraceContext startProcedure(String sn, String order) { long thread = Thread.currentThread().getId(); TraceContext current = contexts.get(thread); if (current == null){ //创建一个新的 current = new TraceContext.Default(null,sn,order); }else{ current = current.newChild(); } contexts.put(thread, current); return current; } @Override public void endProcedure(TraceContext ctx, String type, String name, String result, String note,long contentLength) { endProcedure(ctx,type,name,result,note,"",contentLength); } @Override public void endProcedure(TraceContext ctx, String type, String name, String result, String note, String parameter, long contentLength) { long thread = Thread.currentThread().getId(); TraceContext current = contexts.get(thread); if (current != null){ TraceContext parent = current.parent(); if (parent == null){ contexts.remove(thread); }else{ contexts.put(thread, parent); } TLog traceLog= new TLog(); traceLog.sn(current.sn()); traceLog.order(current.order()); traceLog.method(name); traceLog.reason(note); traceLog.code(result); traceLog.type(type); traceLog.parameter(parameter); traceLog.startDate(current.timestamp()); traceLog.duration(System.nanoTime()-current.startTime()); traceLog.contentLength(contentLength); log(traceLog); }else{ //如果为空,恐怕出了问题 LOG.error("It is impossible,something is wrong."); } } @Override public void configure(Properties p) { super.configure(p); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy