我想以某种方式找出哪个 CFC 正在调用我的方法。
我有一个记录 CFC,它被许多不同的 CFC 调用。在此日志记录 CFC 上,需要存储哪个 CFC 调用日志。
虽然我可以简单地将 CFC 名称作为参数传递给 log.cfc,但我发现这是一项重复性任务,如果我能以某种方式找出“谁”在 log.cfc 上调用该方法,则可能没有必要
有没有任何程序化的方式来实现这一目标?
提前致谢
Update: As 理查德·廷格尔的回答 https://stackoverflow.com/a/27065409/18511指出,从 CF10 开始您可以使用调用StackGet() https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-c-d/CallStackGet.html,这比抛出虚拟异常更好。
原答案:最简单的方法是抛出一个虚拟异常并立即捕获它。但这有一个缺点,就是在调试输出中出现虚拟异常。对我来说,这是一个破坏性的事情,所以我编写了以下代码(基于)。我想创建一个类似于 cfcatch 对象的对象,以便我可以在需要 cfcatch 对象的地方使用它。
注意:您可能需要稍微调整此代码才能使其在 CF8 或更早版本中运行。我不认为{...}
CF9 之前支持创建对象的语法。
StackTrace = {
Type= 'StackTrace',
Detail= '',
Message= 'This is not a real exception. It is only used to generate debugging information.',
TagContext= ArrayNew(1)
};
j = CreateObject("java","java.lang.Thread").currentThread().getStackTrace();
for (i=1; i LTE ArrayLen(j); i++)
{
if(REFindNoCase("\.cf[cm]$", j[i].getFileName())) {
ArrayAppend(StackTrace.TagContext, {
Line= j[i].getLineNumber(),
Column= 0,
Template= j[i].getFileName()
});
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)