2010-04-20 15 views
10

Mi piacerebbe in qualche modo scoprire quale CFC sta chiamando il mio metodo.Trova chi chiama il metodo

Ho un CFC di registrazione che viene chiamato da molti CFC diversi. Su questo CFC di registrazione è necessario memorizzare quale CFC ha chiamato per il log.

Mentre potevo semplicemente passare il nome CFC come argomento al mio log.cfc, trovo che si tratti di un'attività ripetitiva, che potrebbe non essere necessaria, se in qualche modo potrei scoprire "chi" sta chiamando il metodo sul registro .cfc

Esiste un modo programmatico per raggiungere questo obiettivo?

Grazie in anticipo

risposta

9

Il modo più semplice è lanciare un'eccezione fittizia e catturarla immediatamente. Ma questo ha il rovescio della medaglia di fare apparire un'eccezione fittizia nel tuo output di debug. Per me, questo è stato un rompicapo, quindi ho scritto il seguente codice (basato su this code on cflib). Volevo creare un oggetto simile a un oggetto cfcatch, in modo che potessi usarlo in posti che si aspettavano un oggetto cfcatch.

Nota: Potrebbe essere necessario regolare leggermente questo codice per farlo funzionare in CF8 o versioni precedenti. Non credo che la sintassi {...} per la creazione di oggetti fosse supportata prima di 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() 
    }); 
    } 
} 
+0

Questo è un modo molto elegante. Grazie per taht –

0

non so di un metodo per fare direttamente quello che stanno chiedendo, forse qualcun altro lo fa.

Tuttavia, credo che si possa ottenere la traccia dello stack e creare una funzione per analizzare l'ultima chiamata di metodo.

This function su cflib consente di ottenere la traccia dello stack.

3

Da ColdFusion 10 v'è ora una funzione per fare questo callStackGet()

Ad esempio, il seguente codice permette di scaricare le analisi dello stack per D:/web/cfdump.txt

<cfdump var="#callStackGet()#" output="D:/web/cfdump.txt"> 
Problemi correlati