使用System.out
(及相关内容)总是感觉很尴尬,因为它是一个公共字段,而且最新版本的Netbeans会明确提示“应删除语句”。
因此我的问题是:是否仍然推荐使用System.out
来写入控制台,或者是否有其他API更值得优先考虑?
编辑:我不是想用于记录日志,而是用于简单的控制台应用程序。类似于ps
将正在运行的进程打印到控制台。
在设计成可从命令行运行的命令中,我认为使用 System.out
和 System.err
进行输出,并用于用户可以合理预期理解的错误消息是合理的。如果您正在从良好的shell或脚本运行应用程序,则System.out
和/或System.err
流可能会被重定向到文件或管道中的另一个进程,但这取决于用户的选择。
在JDK 1.6及更高版本中,java.io.Console
使您的应用程序可以访问控制台。虽然在Javadoc中没有明确说明,但我怀疑java.io.Console
会打开一个新的流到控制台,因此无法重定向。(相当于在旧式UNIX系统上打开“/dev/tty”)只有在应用程序希望确定它正在与用户交谈且没有任何重定向可能性时才应使用此选项;例如,在请求和读取密码时。
请注意,Console
不能保证工作。实际上,据观察,当您从Eclipse运行应用程序时,它不起作用...以及可能其他IDE。
但是,如果您的应用程序是GUI命令,特别是如果它旨在作为无人值守服务运行,则应避免“写入控制台”,因为:
System.{out,err}
或java.io.Console
)可能未连接任何内容;或者1-根据控制台输出的性质,这实际上可能正是用户想要的。但是应用程序员需要考虑到这一点。
是的,主要原因在于没有其他方法可以向控制台写入内容。即使您使用日志框架,最终也会使用System.out
。
只需使用一个日志框架,而不是使用System.out
,以调试级别记录,并在开发环境(非生产环境)中将输出设置为控制台和日志级别为调试。