首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取映射到标准输出/错误的文件?

如何获取映射到标准输出/错误的文件?
EN

Stack Overflow用户
提问于 2012-01-06 18:46:20
回答 4查看 100关注 0票数 0

当我的Java程序启动时,使用如下命令(unix)将标准的out和err重定向到一些特定的文件:

代码语言:javascript
复制
> 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配置文件,但这相当复杂;这是不可能的。

EN

回答 4

Stack Overflow用户

发布于 2012-01-06 18:57:11

这样做是不可能的,因为您只能检索文件本身。您可以查找该文件,但使用硬链接时,该文件可以出现在多个目录中。如果你需要这个解决方案,我建议你这样做

代码语言:javascript
复制
java org.company.MyClass /path/to/some/file /path/to/err/file

并使用System.setOut和System.setErr将输出定向到文件。这样你也会知道他们的路径。

另一种方法是这样做。

代码语言:javascript
复制
java org.company.MyClass /path/to/some 1>/path/to/some/file 2>/path/to/err/f
票数 1
EN

Stack Overflow用户

发布于 2012-01-06 18:48:22

如果您的程序关心文件名,则应该将输出和错误文件作为参数提供给程序,而不是重定向stdout和stderr。

毕竟,您的程序完全可以在不重定向输出的情况下运行-在这种情况下,您希望在哪里写入这个额外的文件?

票数 0
EN

Stack Overflow用户

发布于 2012-01-06 18:57:26

您不能这样做,因为这是处理此问题的UNIX shell。据我所知,没有哪个UNIX工具能够完成您提出的任务。

您应该通过使用日志记录框架或(较低级别的)将System.err和System.out设置为FileOutputStream,在java程序本身内重定向输出。然后,您可以通过使用参数指定这个"stdout文件“,您可以在java程序中恢复该文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8756637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档