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

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

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

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

 machineName = createObject("java", "java.net.InetAddress").localhost.getCanonicalHostName(); hostaddress = createObject("java", "java.net.InetAddress").localhost.getHostAddress();  

您可以使用服务器变量

 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 

将代码调整到特定平台。 执行以查看适用于您的Coldfusion版本的内容。

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

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

我相信CGI.SERVER_NAME会为您提供您想要的。

根据评论编辑:您可能能够做一些更“低级别”的事情……

   

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

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

   

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

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

  machineName = createObject("java", "java.net.InetAddress").localhost.getCanonicalHostName(); hostaddress = createObject("java", "java.net.InetAddress").localhost.getHostAddress();  


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

 #cgi.server_name# 

希望这是你所期待的。