Java 使用SLF4J记录STDOUT和STDERR,但作为守护进程运行

Java 使用SLF4J记录STDOUT和STDERR,但作为守护进程运行,java,stdout,slf4j,stderr,Java,Stdout,Slf4j,Stderr,今天早些时候我发现了这一点,它很好地解决了我遇到的一个问题: 然而,它导致了另一个问题:为了使这项工作正常,我不能在运行代码时关闭stdout和stderr,否则我将无法获取日志消息。这会在启动守护进程时导致问题,因为它会锁定终端。按Ctrl+C组合键可以工作,但不是很优雅 那么,有没有人知道一种方法,我可以捕获发送到STDOUT或STDERR的消息,但仍然可以断开与终端的连接?好的,我找到了。我以前没有注意到这一点,但我引用的代码保留了System.out和System.err的旧流,以防用

今天早些时候我发现了这一点,它很好地解决了我遇到的一个问题:

然而,它导致了另一个问题:为了使这项工作正常,我不能在运行代码时关闭stdout和stderr,否则我将无法获取日志消息。这会在启动守护进程时导致问题,因为它会锁定终端。按Ctrl+C组合键可以工作,但不是很优雅


那么,有没有人知道一种方法,我可以捕获发送到STDOUT或STDERR的消息,但仍然可以断开与终端的连接?

好的,我找到了。我以前没有注意到这一点,但我引用的代码保留了System.out和System.err的旧流,以防用户想要返回打印到其中一个。删除该代码解决了我的问题

编辑:另外,必须在java命令的末尾使用以下命令将stdout/stderr重定向到/dev/null以启动进程:

2>/dev/null 1>&2 &

这似乎运作良好。希望这对将来的其他人有用。

请添加您的代码或您当前拥有的代码,以便我们能够更好地帮助您。很遗憾,我无法以当前的形式向您显示我的代码。相关的代码只不过是实例化记录器并使用它(例如logger.info(…)加上那篇文章中描述的内容。