2009-05-06 60 views
15

ColdFusion代码中有没有什么方法可以确定代码在哪个服务器上执行?我有几个负载平衡的ColdFusion服务器。我希望能够在发现异常时知道代码在哪个服务器上运行,因此我可以将这些信息包含在日志记录/报告代码中。在ColdFusion中,有没有一种方法可以确定代码在哪个服务器上运行?

服务器是Windows 2003/IIS,如果这很重要。我很想知道如何在Linux/Apache中完成它。 :-)

回答

26

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

<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 /> 
2

我相信CGI.SERVER_NAME会给你你想要的。根据注释

编辑:您可能能够做一些更“低水平” ......

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

(无CF服务器在这里工作,所以我不能测试)。

+2

我不这么认为。它将包含面向客户端的服务器名称。没办法找到你在这里的实际机器。 – Tomalak 2009-05-06 17:42:49

+0

这在负载平衡方案中不够用吗? – 2009-05-06 17:56:07

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

另一个地方寻找有关执行的JRun过程信息,以实例如下:

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

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

-1

使用下面的一段代码来获取域名。

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

希望这是你所期待的。

0

对于我们使用节点后面我最终调用“主机名”命令一个负载均衡的代理,适用于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> 
相关问题