发生日志记录时,Java控制台会按下输入文本

时间:2017-07-28 16:46:10

标签: 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 )。

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

1 个答案:

答案 0 :(得分:2)

正如其他人在评论部分已经提到的那样,你可以对这种行为做些什么。

但通常您不希望登录您正在使用的tty

如果您在系统上拥有root权限,则尝试禁止控制台上的日志消息并将其重定向到日志文件,除非有充分的理由不这样做。因为它取决于谁发送消息,所以这样做的方法不同。

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

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

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

startup_message off
如果您不喜欢屏幕开始消息,请填写

。您甚至可以使用它启动控制台应用程序,以便在停止应用程序时屏幕会话结束。

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

屏幕具有更多功能,例如命名会话,重新连接到会话等。有关详细信息,请参阅手册。

(屏幕解决方案显然只有在您的应用程序不会生成屏幕上的日志消息时才有效。在这种情况下,配置您的记录器,它不会记录到stdout)