将程序错误重定向到日志和错误文件

将程序错误重定向到日志和错误文件

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

我想捕获/写入此 Java 程序抛出的错误两个都在日志文件中,并作为单独的错误文件(MyJavaStandalone.err)。

我知道以下命令:
错误重定向到单独的文件,但不重定向到日志文件

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

日志和错误都会重定向到同一个日志文件,但错误不会单独写入单独的错误文件

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

答案1

尝试一下:

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

答案2

你可以通过以下方式实现你想要的:

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

它能做什么:

  • 创建一个新的文件描述符 3,它将输出到 STDOUT ( 3>&1)
  • 将 STDERR 重定向到 STDOUT ( 2>&1)
  • 将 STDOUT 输出到日志文件 ( 1>MyJavaStandalone.log)
  • tee获取上一个命令的 STDOUT(实际上是 Java 应用程序的 STDERR),将输出附加到日志文件(因此日志文件现在有两个流)并将流复制到 STDOUT
  • 最后,STDOUT 被重定向到你的错误日志

相关内容