Java Nohup追加输出和错误,而不是覆盖

Java Nohup追加输出和错误,而不是覆盖,java,bash,logging,nohup,Java,Bash,Logging,Nohup,我使用nohup将java输出和错误附加到同一个日志文件中。问题是它写入了一个输出,然后覆盖了日志文件,导致错误,输出被擦除 nohup命令是 nohup java Daemon 1000 >logs/wrapper.log 2>logs/wrapper.log & 这是我想从Daemon.java中登录wrapper.log的消息 System.out.println("This is output that should go to the file"); Syste

我使用nohup将java输出和错误附加到同一个日志文件中。问题是它写入了一个输出,然后覆盖了日志文件,导致错误,输出被擦除

nohup命令是

nohup java Daemon 1000 >logs/wrapper.log 2>logs/wrapper.log &
这是我想从Daemon.java中登录wrapper.log的消息

System.out.println("This is output that should go to the file");

System.err.println("This is error that should go to the file");
但只有最后一条消息写入该文件。最合理的答案是知道如何为输出和错误追加wrapper.log,而不是覆盖

有什么想法吗


谢谢

很可能是错误输出覆盖了标准输出,因为您都在写入同一个文件。 尝试以下方法:
nohup java守护进程1000&>logs/wrapper.log&

&
适用于某些shell(在任何情况下,bash都不能确定tcsh/zsh/…),因此请试用它或让我们知道您使用的是哪个shell。

最便携(也是我首选的方法)是:

>FD
重定向将使用O_APPEND标志打开。cello的答案是bashism(以及大多数kshes和zsh)同时重定向stdout和stderr,但不能解决在追加模式下打开的问题

请参阅:和相关链接


编辑:我发现这实际上并没有解决追加问题。我将编辑该页面。这些链接仍然相关。

谢谢您的回答。我马上就去试试。我还想知道,在运行java程序时,是否有办法将windows中的所有控制台输出/错误/异常放在日志文件中。我知道我们可以用java中的printstream实现,但是有没有一个windows控制台功能,它可以像nohup一样进行日志记录。提供了几个关于如何在windowsHi上执行日志重定向的示例。感谢您的回复。这似乎是可行的,但现在日志还包含nohup:忽略输出,每次添加答案都会污染日志。还有一种方法可以在运行java程序时将windows中的所有控制台输出/错误/异常放在日志文件中。我知道我们可以用java中的printstream来实现这一点,但是有没有windows控制台的功能,它可以像刚才显示的命令u那样进行日志记录?正常情况下,如果nohup的输出是一个终端,它会创建一个nohup.out文件来保存输出,但这里不是这样。如果Java程序输出的唯一目的是记录日志,那么最好让Java以必要的模式打开日志文件本身,以便附加,然后使用bash脚本进行包装,以执行重定向。不幸的是,我对Windows下I/O的工作原理知之甚少。
cmd >>logs/wrapper.log 2>&1 &