Java 控制台在发生日志记录时推送输入文本

标签 java shell logging input

通过MobaXterm的 SSH 功能,我在远程 Linux 服务器上运行 Java 应用程序。当我尝试输入终端(通过 Scanner 处理用户输入请求)并且发生任何日志记录时出现问题。当出现任何打印语句时,我输入的文本会自动推送到日志记录部分。

说明示例:

  1. 我在控制台中手动输入 "MY_INPUT_TO_SET_SOME_VARIABLE 50"(从不按 ENTER)。

    enter image description here

  2. 服务器上发生一些日志记录并自动将手动键入的“MY_INPUT_TO_SET_SOME_VARIABLE 50”“发送”到显示区域。

    enter image description here

    (在上面,您可以看到 50 附加到 09:08 时我从未按下 enter)。

期望的行为是允许高级用户在终端的文本区域(或其他合理的地方)简单地键入文本,直到按下 ENTER 键。终端文本区域中的文本不应自动推送到记录或打印的语句中。我查看了终端设置,但找不到任何可以修改此行为的内容。

最佳答案

正如其他人已经在评论部分提到的那样,您对这种行为无能为力。

但是通常您不想登录 tty你正在与之合作。

如果您在系统上有 root 权限,您连接时会尝试抑制控制台上的日志消息并将它们重定向到日志文件,除非有充分的理由不这样做。由于这取决于发送消息的人,因此发送消息的方法也不同。

另一种可能性是启动一个 screen在您的终端中打开一个新的 tty session 。 为了便于使用,我会直接连接到屏幕 session :

ssh -t user@server /usr/bin/screen

如果您在您连接的用户的主目录中创建一个 .screenrc 文件,请将

startup_message off

如果您不喜欢屏幕启动消息,请在其中添加。您甚至可以使用它启动您的控制台应用程序,以便在您停止应用程序时屏幕 session 结束。

ssh -t user@server /usr/bin/screen your_start_command_here

Screen 具有更多功能,例如命名 session 、重新附加到 session 等。有关详细信息,请参阅手册。

(屏幕解决方案显然只有在屏幕上的日志消息不是由您的应用程序生成时才有效。在这种情况下,配置您的记录器使其不记录到标准输出)

关于Java 控制台在发生日志记录时推送输入文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45378638/

相关文章:

Java输入流/输出流写入同名文件

java - 如何使用 Hamcrest 检查集合是否包含给定顺序的项目

java - 求两个时间值之间的时间差始终给出 "Second"值 0

java - 如何在 Java 中以 root 权限运行 shell 命令

linux - 为什么不取命令行的第一行作为输出

linux - 使用 iptables 记录所有到关闭端口的连接

tomcat - 如何登录 axis2 部署的 Web 服务

java - 检索路径参数 AbstractPhaseInterceptor cxf

java - 将选定的控制台输出重定向到文件

curl - 如何接受来自 Go 的 POST 请求并将输出写入文件?