2012-04-16 180 views
1

我正在使用nohup將java輸出和錯誤追加到同一個日誌文件。問題在於它會寫入一個輸出,然後它會覆蓋日誌文件中的錯誤並將輸出擦除。Nohup追加輸出和錯誤而不是覆蓋

nohup命令是

nohup java Daemon 1000 >logs/wrapper.log 2>logs/wrapper.log & 

這是我想登錄wrapper.log從Daemon.java

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的輸出和錯誤,而不是覆蓋

任何想法

感謝

回答

4

最輕便(和我的優選的方法)是:

cmd >>logs/wrapper.log 2>&1 & 

>>FD重定向與O_APPEND標誌打開。大提琴的答案是一個bashism(和大多數kshs和zsh)一次重定向stdout和stderr,但不能解決在append模式下打開的問題。

參見:http://mywiki.wooledge.org/BashPitfalls#somecmd_2.3E.261_.3Elogfile和相關鏈接。

編輯:我看到這實際上並沒有解決追加問題。我將編輯該頁面。鏈接仍然相關。

+0

嗨,感謝您的回覆。它似乎可行,但現在日誌還包含nohup:忽略每次追加答案時都會污染日誌的輸出。還有一種方法,我可以把所有的控制檯輸出/錯誤/異常在Windows中運行一個Java程序時的日誌文件。我知道我們可以在java中使用printstream來做到這一點,但有沒有一個Windows控制檯功能,它會記錄下你剛剛顯示的命令 – shujaat 2012-04-16 07:30:09

+1

通常,如果nohup的輸出是終端,它會創建一個nohup.out文件來保存輸出,但這不是這裏的情況。如果Java程序輸出的唯一目的是記錄日誌,那麼讓Java以必要的模式打開日誌文件本身,然後用bash腳本來包裝重定向可能會更好。不幸的是,我對Windows下I/O的工作原理知之甚少。 – ormaaj 2012-04-16 07:43:19

2

最有可能的,錯誤出覆蓋標準輸出,因爲你們都寫入同一個文件。 嘗試類似: nohup java Daemon 1000 &> logs/wrapper.log &

&>作品上的一些貝殼(慶典在任何情況下,不能確定的tcsh/zsh的/ ...),所以嘗試一下,或讓我們知道哪些外殼所使用。

+0

感謝您的回答。我會在短時間內嘗試。我還想知道,在運行java程序時,是否可以將Windows中的所有控制檯輸出/錯誤/異常都放到日誌文件中。我知道我們可以在java中使用printstream來做到這點,但是有一個Windows控制檯功能,它可以像nohup一樣進行日誌記錄。 – shujaat 2012-04-16 07:21:45

+1

http://support.microsoft.com/kb/110930給出了幾個關於如何在Windows上執行日誌重定向的例子 – cello 2012-04-16 07:24:13