找出谁在调用方法

Mar*_*ona 10 methods coldfusion cfc

我想以某种方式找出哪个CFC正在调用我的方法.

我有一个记录CFC,由许多不同的CFC调用.在此日志记录CFC上,需要存储调用日志的CFC.

虽然我可以简单地将CFC名称作为参数传递给我的log.cfc,但我发现这是一个重复性的任务,如果我能以某种方式找出"谁在"log.cfc上调用该方法,那么这可能没有必要.

有没有任何程序化的方法来实现这一目标?

提前致谢

Kip*_*Kip 9

最简单的方法是抛出一个虚拟异常并立即捕获它.但这有一个缺点,就是在调试输出中显示一个虚拟异常.对我来说,这是一个交易破坏者,所以我编写了以下代码(基于cflib上的代码).我想创建一个类似于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()
    });
  }
}
Run Code Online (Sandbox Code Playgroud)