亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? tracer.aj

?? 用于JAVA數(shù)據(jù)庫連接.解壓就可用,方便得很
?? AJ
字號:
/*
      Copyright (C) 2005 MySQL AB

      This program is free software; you can redistribute it and/or modify
      it under the terms of version 2 of the GNU General Public License as 
      published by the Free Software Foundation.

      There are special exceptions to the terms and conditions of the GPL 
      as it is applied to this software. View the full text of the 
      exception in file EXCEPTIONS-CONNECTOR-J in the directory of this 
      software distribution.

      This program is distributed in the hope that it will be useful,
      but WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      GNU General Public License for more details.

      You should have received a copy of the GNU General Public License
      along with this program; if not, write to the Free Software
      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

package com.mysql.jdbc.trace;

import java.io.PrintStream;
import java.sql.SQLException;

import com.mysql.jdbc.log.Log;
import com.mysql.jdbc.log.StandardLogger;
import com.mysql.jdbc.Connection;

import org.aspectj.lang.JoinPoint;

public aspect Tracer {

    pointcut constructors(): execution(* *(..)) && within(com.mysql.jdbc.* ) 
    	&& within (!com.mysql.jdbc.trace.*) && within(!com.mysql.jdbc.log.*)
    	&& within (!com.mysql.jdbc.Util);
  
    pointcut methods(): execution(* *(..)) && within(com.mysql.jdbc.* ) 
    	&& within(!com.mysql.jdbc.trace.*) && within(!com.mysql.jdbc.log.*)
    	&& within (!com.mysql.jdbc.Util);

    before(): constructors() && methods() {
		entry(thisJoinPoint, false);
    }
    
    after() returning (Object o): constructors() && methods() {
	  exit(thisJoinPoint, false, o);
    }

	private Log standardLogger = new StandardLogger("MySQL", false);
	
    private ThreadLocal stream = new ThreadLocal() {
	    protected Object initialValue() {
			return System.err;
	    }
	};
	
	private ThreadLocal log = new ThreadLocal() {
		protected Object initialValue() {
			return standardLogger;
	    }
	};
	
    private ThreadLocal callDepth = new ThreadLocal() {
	    protected Object initialValue() {
			return new Integer(0);
	    }
	};

    private PrintStream getStream() { 
		return (PrintStream)stream.get(); 
    }
    
    private void setStream(PrintStream s) { 
		stream.set(s); 
    }
    
    private int  getCallDepth() { 
		return ((Integer)(callDepth.get())).intValue();
    }
    
    private void setCallDepth(int n) { 
		callDepth.set(new Integer(n)); 
    }
    
    private Log getLog() { 
		return (Log)log.get();
    }
    
    private void setLog(Log l) { 
		log.set(l); 
    }

    private void entry(JoinPoint jp, boolean isConstructor) {
		
		if (jp.getTarget() instanceof com.mysql.jdbc.Connection) {
			if ("getLog".equals(jp.getSignature().getName())) {
				return;
			}
			
    		try {
    			Log connectionLog = ((com.mysql.jdbc.Connection)jp.getTarget()).getLog();

    			if (getLog() != connectionLog) {
    				setLog(connectionLog);
	    		}
	    	} catch (SQLException ex) {
	    		// swallow it, can't do anything here
	    	}
    	}
    	
    	if ("com.mysql.jdbc.Buffer".equals(jp.getSignature().getDeclaringTypeName())
    		&& ("toString".equals(jp.getSignature().getName())
    		 || "dumpClampedBytes".equals(jp.getSignature().getName()))) {
    		return;
    	}
    	
    	if ("com.mysql.jdbc.StringUtils".equals(jp.getSignature().getDeclaringTypeName())
    		&& "dumpAsHex".equals(jp.getSignature().getName())) {
    		return;
    	}
    	
		setCallDepth(getCallDepth() + 1);
		printEntering(jp, isConstructor);
    }

    private void exit(JoinPoint jp,  boolean isConstructor, Object returnValue) {
    	if (jp.getTarget() instanceof com.mysql.jdbc.Connection) {
			if ("getLog".equals(jp.getSignature().getName())) {
				return;
			}
		}
		
    	if ("com.mysql.jdbc.Buffer".equals(jp.getSignature().getDeclaringTypeName())
    		&& ("toString".equals(jp.getSignature().getName())
    		 || "dumpClampedBytes".equals(jp.getSignature().getName()))) {
    		return;
    	}
    	
    	if ("com.mysql.jdbc.StringUtils".equals(jp.getSignature().getDeclaringTypeName())
    		&& "dumpAsHex".equals(jp.getSignature().getName())) {
    		return;
    	}
			
		printExiting(jp, isConstructor, returnValue);
		setCallDepth(getCallDepth() - 1);
    }

    private void printEntering (JoinPoint jp, boolean isConstructor) {
    	
    	
    	if (getLog().isTraceEnabled()) {
    		
    		StringBuffer buf = new StringBuffer(80);
			printIndent(buf);
			buf.append("--> ");

			buf.append(jp.getSourceLocation().getFileName());
			buf.append(":");
			buf.append(jp.getSourceLocation().getLine());
			buf.append(" ");
			buf.append(jp.getSignature().getDeclaringTypeName());
			buf.append(".");
			buf.append(jp.getSignature().getName());
    		printParameters(jp, buf);

			getLog().logTrace(buf);
		}
    }

    private void printExiting (JoinPoint jp, boolean isConstructor, Object returnValue) {
    	if (getLog().isTraceEnabled()) {
    		StringBuffer buf = new StringBuffer(80);
			printIndent(buf);
			
			buf.append("<--  ");
			buf.append(jp.getSourceLocation().getFileName());
			buf.append(":");
			buf.append(jp.getSourceLocation().getLine());
			buf.append(" ");
			buf.append(jp.getSignature().getDeclaringTypeName());
			buf.append(".");
			buf.append(jp.getSignature().getName());
			buf.append("(..) returning ");
			
			boolean isString = returnValue instanceof String;
  			
  			if (isString) {
  				buf.append("\"");
  			}
  	    	
  	    	buf.append(returnValue);
  	    	
  	    	if (isString) {
  				buf.append("\"");
  			}

			getLog().logTrace(buf);
		}
    }



    private void printIndent(StringBuffer buf) {
		for (int i = 0; i < getCallDepth(); i++) {
	    	buf.append(" ");
	    }
    }
    
    private void printParameters(JoinPoint jp, StringBuffer buf) {
  		Object[] params = jp.getArgs();
	 	
  		buf.append("(");
  		
  		for (int i = 0; i < params.length; i++) {
  			boolean isString = params[i] instanceof String;
  			
  			if (isString) {
  				buf.append("\"");
  			}
  	    	
  	    	if (params[i] != null) {
  	    		Class paramClass = params[i].getClass();
  	    		String paramClassName = null;
  	    		
  	    		if (paramClass != null) {
  	    			paramClassName = paramClass.getName();
  	    		}
  	    		
  	    		if (paramClassName!= null &&
  	    			"com.mysql.jdbc.Buffer".equals(paramClassName)
  	    			|| "com.mysql.jdbc.ByteArrayBuffer".equals(paramClassName)
  	    			|| "com.mysql.jdbc.ChannelBuffer".equals(paramClassName)) {
  	    			buf.append("Network packet, data follows:\n\n");
  	    			buf.append(params[i]);
  	    			buf.append("\n\n");
  	    		} else {
  	    			buf.append(params[i]);
  	    		}
  	    	} else {
  	    		buf.append("null");
  	    	}
  	    	
  	    	if (isString) {
  				buf.append("\"");
  			}
  			
  	    	if (i < params.length - 1) {
  	    		buf.append(", ");
  	    	}
  		}
  		
  		buf.append(")");
    }

}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲人123区| 欧美一区二区三区四区久久| 中文av字幕一区| 国产真实精品久久二三区| 日韩欧美国产一区二区在线播放 | 91精品国产综合久久精品| 日韩精品一级二级| 欧美成人女星排行榜| 国产酒店精品激情| 亚洲美女一区二区三区| 欧美日韩国产小视频| 国内精品久久久久影院薰衣草| 久久久噜噜噜久久人人看| 99久久国产免费看| 香蕉乱码成人久久天堂爱免费| 欧美军同video69gay| 欧美激情在线观看视频免费| 国产精品一区二区在线观看不卡| 久久众筹精品私拍模特| 国产a区久久久| 中文字幕欧美一| 欧美色中文字幕| 日韩二区三区四区| 久久久亚洲精品石原莉奈| 国产91精品精华液一区二区三区 | 在线国产电影不卡| 午夜不卡在线视频| 精品播放一区二区| 懂色av一区二区夜夜嗨| 亚洲欧美日韩国产另类专区| 欧美日韩精品免费| 久久99国产精品麻豆| 国产精品乱码久久久久久| 色吊一区二区三区| 免费在线观看不卡| 亚洲国产精品高清| 欧美日高清视频| 国产馆精品极品| 亚洲午夜电影在线| 久久久国际精品| 日本高清免费不卡视频| 免费成人在线播放| √…a在线天堂一区| 欧美色爱综合网| 国产在线播放一区| 国产欧美日韩精品一区| 欧美日韩成人在线| 成人精品免费视频| 日韩黄色片在线观看| 国产精品伦一区| 4438成人网| a美女胸又www黄视频久久| 日精品一区二区| 中文在线一区二区| 欧美成人福利视频| 欧美日韩第一区日日骚| 精品在线免费视频| 亚洲精品欧美二区三区中文字幕| 日韩一二三区视频| 99免费精品视频| 国产精品影视天天线| 亚洲成av人**亚洲成av**| 欧美国产乱子伦| 欧美mv日韩mv| 欧美日韩亚洲另类| 91亚洲永久精品| 粉嫩av一区二区三区在线播放 | 这里只有精品99re| 一本大道久久a久久精二百| 国产乱妇无码大片在线观看| 日韩精品色哟哟| 一区二区三区精品在线观看| 国产精品入口麻豆九色| 亚洲免费毛片网站| 欧美成人一级视频| 7777精品伊人久久久大香线蕉 | 精品久久久久久久久久久久久久久久久 | 免费成人你懂的| 伊人夜夜躁av伊人久久| 国产精品二三区| 国产精品亲子伦对白| www久久精品| 欧美哺乳videos| 91精品国产欧美日韩| 51久久夜色精品国产麻豆| 欧美日韩国产天堂| 色婷婷av一区二区三区之一色屋| 麻豆精品一区二区| 久久精品国产秦先生| 亚洲va中文字幕| 悠悠色在线精品| 亚洲制服丝袜在线| 亚洲成人高清在线| 一区二区三区蜜桃网| 精品久久久久久久久久久久包黑料 | 99这里只有精品| 丁香五精品蜜臀久久久久99网站| 黄网站免费久久| 国产伦精品一区二区三区在线观看 | 樱花影视一区二区| 亚洲一区二区免费视频| 亚洲午夜电影网| 日日夜夜免费精品| 亚洲国产视频在线| 婷婷综合五月天| 免费在线成人网| 国产成人午夜视频| 成人一级黄色片| 99麻豆久久久国产精品免费优播| 99国产欧美另类久久久精品| 91小视频免费观看| 色就色 综合激情| 欧美另类变人与禽xxxxx| www国产精品av| 国产精品嫩草影院av蜜臀| 国产精品久久久久久久浪潮网站 | 国产在线视频一区二区三区| 精品一区二区三区蜜桃| 大胆欧美人体老妇| 91福利视频在线| 日韩欧美电影在线| 国产欧美精品一区二区三区四区| 亚洲欧洲日韩综合一区二区| 亚洲制服欧美中文字幕中文字幕| 免费日韩伦理电影| 成人午夜免费av| 欧美日韩国产三级| 国产女主播视频一区二区| 亚洲国产高清aⅴ视频| 亚洲午夜三级在线| 激情伊人五月天久久综合| 成人爱爱电影网址| 欧美日韩精品欧美日韩精品一综合| 精品美女一区二区| 亚洲激情五月婷婷| 国产在线不卡一卡二卡三卡四卡| 色诱视频网站一区| 精品国产99国产精品| 亚洲欧美日韩久久| 国产在线不卡一区| 欧美另类videos死尸| 国产亚洲欧美日韩日本| 一区二区三区资源| 国内精品免费**视频| 欧美无人高清视频在线观看| 久久九九全国免费| 肉肉av福利一精品导航| 97se亚洲国产综合自在线 | 国产精品福利在线播放| 麻豆精品一区二区av白丝在线| 91视频国产资源| 久久影院视频免费| 午夜婷婷国产麻豆精品| 成人动漫在线一区| 精品国产乱码久久久久久图片 | 欧美成人三级在线| 亚洲一区二区三区四区在线观看 | 亚洲精品视频在线| 国产寡妇亲子伦一区二区| 91精品国产91久久久久久一区二区| 中文字幕中文字幕一区二区 | 国产精品你懂的在线欣赏| 蜜臀av一区二区三区| 欧美网站一区二区| 自拍偷拍国产精品| 国产ts人妖一区二区| 精品精品国产高清一毛片一天堂| 亚洲国产视频a| 91国模大尺度私拍在线视频| 亚洲欧洲成人自拍| 国产 日韩 欧美大片| 精品av久久707| 久久激五月天综合精品| 欧美一区二区三区在线电影| 亚洲图片欧美综合| 欧美在线视频不卡| 夜夜操天天操亚洲| 在线视频中文字幕一区二区| 亚洲精品国产a久久久久久| 97久久精品人人澡人人爽| 国产精品情趣视频| 成人高清免费观看| 中文字幕一区二区视频| 99re成人在线| 亚洲精品国产一区二区精华液 | 欧美二区三区的天堂| 亚洲第一福利视频在线| 欧美视频日韩视频在线观看| 亚洲午夜免费电影| 在线电影一区二区三区| 香蕉影视欧美成人| 欧美一区二区三区系列电影| 久久国产人妖系列| 日韩一级片网址| 国产精品一线二线三线| 中文幕一区二区三区久久蜜桃| 国产自产2019最新不卡| 亚洲精品在线免费观看视频| 国产精品综合网| 中文字幕一区二区视频|