将程序错误redirect到日志文件和错误文件

我有一个Java独立程序,计划每10分钟运行一次cron

我想在日志文件中捕获/写入由此Java程序引发的错误,并且还将其作为单独的错误文件(MyJavaStandalone.err)。

我知道下面的命令:
错误redirect到单独的文件,但不logging文件

/usr/java/jdk1.6.0/bin/java MyJavaStandalone >> MyJavaStandalone.log 2>> MyJavaStandalone.err & 

日志和错误都被redirect到同一个日志文件,但是错误本身不会写入到单独的错误文件中

 /usr/java/jdk1.6.0/bin/java MyJavaStandalone >> MyJavaStandalone.log 2>&1 & 

试试这个:

 /usr/java/jdk1.6.0/bin/java MyJavaStandalone 2>&1 >> MyJavaStandalone.log | tee -a MyJavaStandalone.err >> MyJavaStandalone.log & 

你可以实现你想要的东西:

 /usr/java/jdk1.6.0/bin/java MyJavaStandalone 3>&1 2>&1 1>MyJavaStandalone.log| tee -a MyJavaStandalone.log > MyJavaStandalone.err 

它能做什么:

  • 创build一个新的文件描述符3,输出到STDOUT( 3>&1
  • 将STDERRredirect到STDOUT( 2>&1
  • 输出STDOUT到日志文件( 1>MyJavaStandalone.log
  • tee将前一个命令的STDOUT(实际上是Java应用程序的STDERR)的STDOUT附加到日志文件(因此日志文件现在具有这两个stream),并将该stream复制到STDOUT
  • 最后,STDOUT只是redirect到你的错误日志