RMI - 客户端如何获得服务器控制台输出?
RMI - How client can get server console output?
我需要所有服务器控制台输出都出现在客户端输出中。
我在远程 VM 上调用远程方法,在远程方法执行期间,我有一些 log4j 报告到控制台(在远程)。
我想获取/return所有 log4j 报告到我的客户端控制台。
这可能吗?
不是真的。您必须了解客户端和服务器 仅 通过您定义的 RMI 接口进行通信。然后两个程序 运行 在它们的 自己的 JVM 中;所以标准输出对于客户端和服务器来说是完全不同的。对于任何类型的日志记录基础架构当然也是如此。
如果您真的想将服务器消息推送到您的客户端日志中;那么您需要 增强 该 RMI 接口,例如允许服务器发回包含所有消息的 List<String>
。
但请注意:这是一个相当糟糕的设计理念。您真的 不希望您的客户端日志包含服务器 详细信息。服务器上发生的事情......留在服务器上。您的客户没有 知道这些细节。因为您的 用户 可能会发现它在计划攻击您的服务器时非常有帮助......详细了解那东西在做什么!
更新:根据您的意见,我会选择以下内容::
- 确保您真的可以捕获服务器上打印到 stdout/stderr 的任何字符;例如 "replacing" stdout/stderr 以便在那里打印的任何内容都进入某个文件(参见 here)。或者,如果您的 VM 是 Linux,您可以确保两者都通过管道传输到文件中。
- 我不会尝试在 RMI 服务中捕获内容,而是寻求更简单的解决方案 - 通过添加一个 RMI 接口,允许您拉那些stdout/stderr来自您的服务器的文件。换句话说:保持当前的 RMI 调用不变;但构建了另一项服务,您可以使用该服务在任意时间点检索完整的日志文件。
我需要所有服务器控制台输出都出现在客户端输出中。
我在远程 VM 上调用远程方法,在远程方法执行期间,我有一些 log4j 报告到控制台(在远程)。
我想获取/return所有 log4j 报告到我的客户端控制台。
这可能吗?
不是真的。您必须了解客户端和服务器 仅 通过您定义的 RMI 接口进行通信。然后两个程序 运行 在它们的 自己的 JVM 中;所以标准输出对于客户端和服务器来说是完全不同的。对于任何类型的日志记录基础架构当然也是如此。
如果您真的想将服务器消息推送到您的客户端日志中;那么您需要 增强 该 RMI 接口,例如允许服务器发回包含所有消息的 List<String>
。
但请注意:这是一个相当糟糕的设计理念。您真的 不希望您的客户端日志包含服务器 详细信息。服务器上发生的事情......留在服务器上。您的客户没有 知道这些细节。因为您的 用户 可能会发现它在计划攻击您的服务器时非常有帮助......详细了解那东西在做什么!
更新:根据您的意见,我会选择以下内容::
- 确保您真的可以捕获服务器上打印到 stdout/stderr 的任何字符;例如 "replacing" stdout/stderr 以便在那里打印的任何内容都进入某个文件(参见 here)。或者,如果您的 VM 是 Linux,您可以确保两者都通过管道传输到文件中。
- 我不会尝试在 RMI 服务中捕获内容,而是寻求更简单的解决方案 - 通过添加一个 RMI 接口,允许您拉那些stdout/stderr来自您的服务器的文件。换句话说:保持当前的 RMI 调用不变;但构建了另一项服务,您可以使用该服务在任意时间点检索完整的日志文件。