当我的Java程序启动时,使用如下命令(unix)将标准的out和err重定向到一些特定的文件:
> java org.company.MyClass 1>/path/to/some/file 2>/path/to/err/file有没有办法从Java程序中读取这些信息?我的要求是在与标准输出相同的目录中编写一个文件。
unix脚本实际上是启动java批处理程序的脚本。Java程序本身使用log4j,但是登录到控制台,因此日志最终被写入这些文件。我不能在log4j配置中指定文件附加器,因为文件的路径是由unix脚本决定的,而不是由Java程序决定的。理想情况下,unix脚本应该生成log4j程序使用的Java配置文件,但这相当复杂;这是不可能的。
发布于 2012-01-06 18:57:11
这样做是不可能的,因为您只能检索文件本身。您可以查找该文件,但使用硬链接时,该文件可以出现在多个目录中。如果你需要这个解决方案,我建议你这样做
java org.company.MyClass /path/to/some/file /path/to/err/file并使用System.setOut和System.setErr将输出定向到文件。这样你也会知道他们的路径。
另一种方法是这样做。
java org.company.MyClass /path/to/some 1>/path/to/some/file 2>/path/to/err/f发布于 2012-01-06 18:48:22
如果您的程序关心文件名,则应该将输出和错误文件作为参数提供给程序,而不是重定向stdout和stderr。
毕竟,您的程序完全可以在不重定向输出的情况下运行-在这种情况下,您希望在哪里写入这个额外的文件?
发布于 2012-01-06 18:57:26
您不能这样做,因为这是处理此问题的UNIX shell。据我所知,没有哪个UNIX工具能够完成您提出的任务。
您应该通过使用日志记录框架或(较低级别的)将System.err和System.out设置为FileOutputStream,在java程序本身内重定向输出。然后,您可以通过使用参数指定这个"stdout文件“,您可以在java程序中恢复该文件。
https://stackoverflow.com/questions/8756637
复制相似问题