Java控制台在发生日志时推送输入文本
通过MobaXterm的SSH功能,我在远程Linux服务器上运行Java应用程序。当我尝试输入终端(通过Scanner处理用户输入请求)并发生任何记录时,会出现问题。我输入的文本会在发生任何打印语句时自动推送到日志记录部分。Java控制台在发生日志时推送输入文本
澄清例如:
-
我手动键入“MY_INPUT_TO_SET_SOME_VARIABLE 50”到控制台(永不按ENTER键)。
-
在服务器上的一些记录发生和自动地“发送”的手动键入“MY_INPUT_TO_SET_SOME_VARIABLE 50”到显示区域。
(上面,你可以看到追加到09:08时,我从来没有按下Enter键)。
期望行为是允许的功率用户只需输入终端的文本区域中的文本(或地方合理),直到按下ENTER键。终端文本区域中的文本不应该在登录或打印语句时自动推送。我查看了终端设置,无法找到任何修改此行为的内容。
正如其他人已经在评论部分中提到的那样,对于这种行为你可以做的不多。
但是通常你不想登录你正在使用的tty。
如果您在连接的系统上拥有root权限,可尝试抑制控制台上的日志消息并将其重定向到日志文件,除非有充分的理由不这样做。由于这取决于谁发送消息,所以这样做的方法不同。
另一种可能性是在您的终端中启动screen会话以打开新的tty。 为了便于使用我将直接连接成一个屏幕会话:
ssh -t [email protected] /usr/bin/screen
如果您在您连接到用户的主目录下的文件.screenrc,把
startup_message off
中,如果你不喜欢屏幕开始消息。您甚至可以使用它启动控制台应用程序,以便在停止应用程序时屏幕会话结束。
ssh -t [email protected] /usr/bin/screen your_start_command_here
屏幕拥有更多的功能,如命名会话,重新连接到会话等更多细节参见手册。
(屏幕解决方案显然只适用于屏幕上的日志消息不是由您的应用程序生成的。在这种情况下配置您的记录器,它不记录到标准输出)
看起来像一个正常的行为。你提示和日志打印到标准输出,没有什么可以告诉它阻止(实质上是缓冲一些数据),直到用户按下Enter键。你尝试过在本地运行类似的东西吗? – vempo
我在本地测试了它,而且这看起来是“正常行为” - 我输入的文本总是附加到任何传入日志记录的较大文本区域。难道不能将我的输入文本与日志记录大文本区域分开吗? ..说,总是有什么我在一个新的行上打字,并保持在那里,直到我按ENTER键?请参阅(http://puu.sh/wY6Dp/acafce9e18.png)和(http://puu.sh/wY6Hh/34dfdb4de4.png)以获得澄清。 – mcw
最初控制台又名终端是围绕“流”概念设计的,因为这就是原始终端所做的:它们只是打印了一串字符。在“流”概念下,您可以分隔几个流并以不同的方式打印它们。但是如果你把它们混合成一个单一的输出,你就不能在其中一个位置上占据一席之地。当出现基于显示的终端时,会添加基于文本的UI功能,例如[ncurses](https://en.wikipedia.org/wiki/Ncurses),但这是一项高级功能,通常需要应用程序的明确支持,为这样一个简单的功能。 – SergGr