Я подумал о другом способе работы.
Настройте метод OnMissingMethod примерно так:
<cffunction name="onMissingMethod">
<cfargument name="missingMethodName" type="string">
<cfargument name="missingMethodNameArguments" type="struct">
<cfset var tmpReturn = "">
<cfset var functionToCallName = "Hidden" & Arguments.missingMethodName>
<cfset arguments.missingMethodArguments.calledMethodName = Arguments.missingMethodName>
<cfinvoke method="#functionToCallName#" argumentcollection="#Arguments.missingMethodArguments#" returnvariable="tmpReturn" />
<cfreturn tmpReturn>
</cffunction>
Затем назовите каждый из обычных методов с префиксом (в данном примере «Hidden») и отметьте их как private. Итак, мой первоначальный пример стал бы:
<cffunction name="HiddenisUsernameAvailable" access="private">
<cfset logAccess(request.userid,Arguments.calledMethodName)>
......
</cffunction>
Теперь все вызовы будут перехвачены onMissingMethod, который добавит имя метода к аргументам, которые передаются реальному методу.
Недостатки, которые я вижу в этом, это то, что самоанализ больше не работает должным образом, и вы должны использовать именованные аргументы для вызова всех ваших функций. Если вы не используете именованные аргументы, аргументы будут случайным образом менять порядок в структуре missingMethodNameArguments.