在ColdFusion中,有没有办法确定运行代码的服务器是什么?

时间:2009-05-06 17:29:42

标签: java networking coldfusion

ColdFusion代码中是否有任何方法可以确定代码执行的服务器?我有几个负载均衡的ColdFusion服务器。我希望能够在捕获异常时知道代码在哪台服务器上运行,因此我可以将这些信息包含在日志/报告代码中。

服务器是Windows 2003 / IIS,如果这很重要的话。我也很想知道如何在Linux / Apache中做到这一点。 : - )

7 个答案:

答案 0 :(得分:27)

这可能会帮助你进一步......

<cfscript>
machineName = createObject("java", "java.net.InetAddress").localhost.getCanonicalHostName();
hostaddress = createObject("java", "java.net.InetAddress").localhost.getHostAddress();
</cfscript>
<cfdump var="#machineName#"><br />
<cfdump var="#hostaddress#"><br />

答案 1 :(得分:9)

您可以使用Server Variables之类的

server.coldfusion.appserver 
server.coldfusion.expiration    
server.coldfusion.productlevel
server.coldfusion.productname   
server.coldfusion.productversion
server.coldfusion.rootdir   
server.coldfusion.serialnumber  
server.coldfusion.supportedlocales
server.os.additionalinformation 
server.os.arch  
server.os.buildnumber   
server.os.name  
server.os.version

将代码调整到特定平台。执行<cfdump var=”#SERVER#” />以查看适用于您的Coldfusion版本的内容。

您可以通过Java调用获取主机名:

<cfscript>
machineName = createObject("java", "java.net.InetAddress").localhost.getHostName();
instanceName = createObject("java", "jrunx.kernel.JRun").getServerName();
</cfscript>

答案 2 :(得分:2)

我相信CGI.SERVER_NAME会为你提供你想要的东西。

每条评论编辑:你可能会做一些“低级别”......

<cfset inet = CreateObject("java", "java.net.InetAddress")>  
<cfdump var = "#inet.getLocalhost().gethostname()#">  

(这里没有CF服务器,所以我无法测试)。

答案 3 :(得分:2)

查找有关执行JRun进程的信息的另一个地方是实例如下:

<cfset oErrorJRun = createObject("java","jrunx.kernel.JRun")/>
<cfset strServerName = oErrorJRun.ServerName />

这将为您提供正在执行代码的JRun实例的名称。我们遇到过这样的情况:在我们的集群环境中,一个节点上的IIS将记录页面命中,但另一个节点上的JRun将处理该请求。偶尔,我们将有一个节点的JRun停止响应,我们需要重新启动一些服务以将流量返回到该节点。我在我的错误处理程序插件中使用上面的代码将服务器名称粘贴到我发送给管理员的电子邮件中,并将其合并到我编写调试信息的文件名中。

答案 4 :(得分:0)

对于我们使用负载平衡代理后面的节点,我最终调用了'hostname'命令,也适用于Windows - 所以这是集合:

<cfscript>
machineName = createObject("java", "java.net.InetAddress").localhost.getCanonicalHostName();
hostaddress = createObject("java", "java.net.InetAddress").localhost.getHostAddress();
</cfscript>
<cfdump var="#machineName#"><br />
<cfdump var="#hostaddress#"><br />
<cfdump var="#CGI.SERVER_NAME#"><br />
<cfexecute name = "hostname" timeout = "1"></cfexecute>

答案 5 :(得分:-1)

使用以下代码获取域名。

<cfoutput>#cgi.server_name#</cfoutput>

希望这是你所期待的。

答案 6 :(得分:-2)

<cffunction name="getMachineName" returntype="string" access="private" output="false" hint="Server Name">
    <cftry>
        <cfexecute
            name="hostname"
            arguments=""
            variable="local.machineNameResult"
            timeout=10 />
            <cfreturn Trim(local.machineNameResult)>
        <cfcatch type="any">
            <cfdump var="#cfcatch#">
            <cfabort>
        </cfcatch>
    </cftry>
</cffunction>

<cfdump var="#getMachineName()#" />
<cfabort />