我正在编写一个使用 ANSI 颜色代码打印日志消息的 Java 框架。当然,用户总是有可能在 Eclipse 中使用它,在这种情况下,ANSI 转义码在控制台上显示为垃圾字符。自动检测它会很好,这样用户就不必手动关闭它。
我已经对这个主题进行了一些谷歌搜索,我怀疑它无法完成,但没有多少人尝试过,所以我认为值得一问。想到的一种方法是检查是否"xterm".equals(System.getenv("TERM"))
,哪种方法有效,但有很多例外,并且在 Windows 上根本不起作用(我也在使用 JANSI 库来获得 Windows 彩色终端支持)。想到的另一个选择是尝试调用外部程序来检查被调用的进程是否eclipse
正在运行,但这是一个肮脏的黑客攻击,并且也有边缘情况(如果有人在终端中运行程序同时使用蚀)。
我什至尝试使用反射来查找正在包装的OutputStream
子类System.out
,假设它可能会根据终端类型而有所不同,但这显然是FileOutputStream
无论如何。
有没有更简单的方法来确定 Java 程序是否在内置的 Eclipse 控制台中运行,或者这是否像听起来那样无望?