2

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を追加する方法を知ることです

何か案は

ありがとう

4

2 に答える 2

4

最もポータブルな(そして私の好みの方法)は次のとおりです。

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

リダイレクトは>>FDO_APPENDフラグで開きます。チェロの答えは、stdoutとstderrの両方を一度にリダイレクトするbashism(およびほとんどのkshesとzsh)ですが、追加モードで開く問題は解決しません。

http://mywiki.wooledge.org/BashPitfalls#somecmd_2.3E.261_.3Elogfileおよび関連するリンクを参照してください。

編集:これは実際には追加の問題に対処していないようです。ページを編集します。リンクはまだ関連しています。

于 2012-04-16T07:22:40.090 に答える
2

ほとんどの場合、両方が同じファイルに書き込むため、エラー出力が標準出力を上書きします。次のようなものを試してください: nohup java Daemon 1000 &> logs/wrapper.log &

&>一部のシェル (いずれにせよ bash、tcsh/zsh/... については不明) で動作するので、試してみるか、使用しているシェルをお知らせください。

于 2012-04-16T07:05:29.807 に答える