Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于tprofiler.log无法产生日志,只有=号的问题 #60

Open
DevenWen opened this issue Oct 19, 2018 · 2 comments
Open

关于tprofiler.log无法产生日志,只有=号的问题 #60

DevenWen opened this issue Oct 19, 2018 · 2 comments

Comments

@DevenWen
Copy link

DevenWen commented Oct 19, 2018

hi,各位。
我这边分析了一下TProfiler的代码,定位了这一个bug,并做了简单的修复。这里和大家分享一下,希望对大家有所帮助。
内部的bug主要在于ProfFilter类及其子类MysqlProfFilter上。

ProfFilter.includePackage字段是用于判断是否需要注入代码的。
public static boolean isNeedInject(String className) {
		String icaseName = className.toLowerCase().replace('.', '/');
		for (String v : includePackage) {
			if (icaseName.startsWith(v)) {
				return true;
			}
		}
		return false;
	}

MysqlProfFilter的构造方法会把mysql的包信息也自动写进去到ProfFilter.includePackage去。

在ProfTransformer.transform中,79行处表示“如果可以注入mysql成功;则不再继续注入”,所以问题在于transform4Mysql方法,45行处,
if(!MysqlProfFilter.getInstance().isNeedInject(className))
这个方法虽然获取了Instance,但是调用的是父类的静态方法,也就是说,我们配置的package都会被视为mysql的类,进而使用mysql的统计方式,而无法把日志写到tprofiler.log上

修复方法:
为MysqlProfFilter定义一个新的静态方法,那个方法只需检查mysql的package。
if(!MysqlProfFilter.isNeedInjectMysql(className))

暂时不清楚作者对这个设置是什么原因,我自己对这个逻辑做了修改,验证过tprofiler.log是可以获得日志,进而按照wiki的方法去做性能分析。

希望这些可以帮助到各位需要使用这个工具的朋友,有问题可以在这个issue下补充留言。

@jwnc
Copy link

jwnc commented Jan 16, 2019

大佬好, 按你的代码放本地编译, 试了好久还是不行.不知道是不是我编译过程不对.
能不能提供你使用的jar给我试试? 谢谢!

@DevenWen
Copy link
Author

大佬好, 按你的代码放本地编译, 试了好久还是不行.不知道是不是我编译过程不对.
能不能提供你使用的jar给我试试? 谢谢!

hi,不好意思事隔半个月才回复你。我的分支上已经有解决的代码了,希望可以帮到你。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants