我正在为我的cli使用spring shell框架。我编写了一些命令,一旦命令在我的java应用程序中执行,它将显示结果。
@CliCommand(value = "add jar", help = "adds a jar resource")
public String addJar(
@CliOption(key = {"", "param"}, mandatory = true, help = "path to jar") String path) {
// code
return result.getMessage();
}
上面的命令尝试添加jar并在命令执行完成后将结果返回给spring shell。 现在,我能够将最终结果状态发送到spring shell。我想在执行时将执行状态也发送到spring shell。
我的用例是:有没有办法在命令运行时向spring shell发送定期更新,而不是一次发送整个结果?
答案 0 :(得分:0)
您可以在命令方法中执行任何操作,包括写入System.out(将发送给用户)。
因此,对于您的特定用例,请定期轮询执行状态并发出消息(甚至可能使用ANSI代码覆盖以前的位置,或显示带print()
而不是println()
的进度条, 等)
答案 1 :(得分:0)
您可以将记录器附加到控制台。 如果只想显示log.info,可以在日志记录配置中对其进行配置。 例如,在logback中:
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>
%-4relative [%thread] %-5level %logger{30} - %msg%n
</pattern>
</encoder>
</appender>
<!-- this is your normal logger -->
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
或者,如果您要向用户显示有关状态的消息,而不是您要记录的内容。抽象shell中有一个方法,用于向用户显示消息。
@Autowired
private JLineShellComponent shell;
@CliCommand(value = "check", help = "just show messages")
public void check(){
shell.flash(java.util.logging.Level.ALL, "initializing ", "id");
init();
shell.flash(java.util.logging.Level.ALL, "running", "id");
run();
shell.flash(java.util.logging.Level.ALL, "finished", "id");
stop();
}