RMI - 客户端如何获得服务器控制台输出?

RMI - How client can get server console output?

我需要所有服务器控制台输出都出现在客户端输出中。

我在远程 VM 上调用远程方法,在远程方法执行期间,我有一些 log4j 报告到控制台(在远程)。

我想获取/return所有 log4j 报告到我的客户端控制台。

这可能吗?

不是真的。您必须了解客户端和服务器 通过您定义的 RMI 接口进行通信。然后两个程序 运行 在它们的 自己的 JVM 中;所以标准输出对于客户端和服务器来说是完全不同的。对于任何类型的日志记录基础架构当然也是如此。

如果您真的想将服务器消息推送到您的客户端日志中;那么您需要 增强 该 RMI 接口,例如允许服务器发回包含所有消息的 List<String>

但请注意:这是一个相当糟糕的设计理念。您真的 不希望您的客户端日志包含服务器 详细信息。服务器上发生的事情......留在服务器上。您的客户没有 知道这些细节。因为您的 用户 可能会发现它在计划攻击您的服务器时非常有帮助......详细了解那东西在做什么!

更新:根据您的意见,我会选择以下内容::

  1. 确保您真的可以捕获服务器上打印到 stdout/stderr 的任何字符;例如 "replacing" stdout/stderr 以便在那里打印的任何内容都进入某个文件(参见 here)。或者,如果您的 VM 是 Linux,您可以确保两者都通过管道传输到文件中。
  2. 我不会尝试在 RMI 服务中捕获内容,而是寻求更简单的解决方案 - 通过添加一个 RMI 接口,允许您那些stdout/stderr来自您的服务器的文件。换句话说:保持当前的 RMI 调用不变;但构建了另一项服务,您可以使用该服务在任意时间点检索完整的日志文件。