我使用的Enerjy(http://www.enerjy.com/)的静态码分析工具在我的Java代码。它告诉我如下一行:

系统。err。释放("忽略的数据库");

是不好的,因为它使用的系统。err。确切的错误是:"JAVA0267使用的系统。犯错"

什么是错的使用的系统。犯错?

有帮助吗?

解决方案

简短的回答:它被认为是不好的做法,用它来记录的目的

这是一个观测,在当存在其中不广泛可用的/接受日志框架,每个人使用System.err的打印错误消息和堆栈跟踪到控制台旧倍。这种方法可能是在开发和本地测试阶段,适当的,但不适合于生产环境,因为你可能会失去重要的错误消息。正因为如此,在今天几乎所有的静态分析工具检测并标记为坏的做法(或类似名称的问题),这种代码。

反过来日志框架提供到记录您的事件和错误消息,因为它们可以以各种持久性的位置存储所述消息中的结构化的和合乎逻辑的方式(日志文件,日志DB,等)。

最明显的(和自由外部依赖的)<击>破解分辨率是通过java.util.logging.Logger类使用内置的Java记录框架默认转发的事件记录到控制台。例如:

final Logger log = Logger.getLogger(getClass().getName());
...
log.log(Level.ERROR, "Something went wrong", theException);

(或你可以只关闭该分析选项)

其他提示

描述你的错误是:

使用的系统。犯错误可以指明剩余的调试或样板代码。考虑使用 功能齐全的记录包例如Apache识共享处理错误记录。

它似乎都正在使用的系统。err为记录的目的,这是最理想的几个原因:

  • 这是不可能的启用日志记录在运行时无需修改应用的二进制
  • 记录行为不可控制的编辑配置文件
  • problably许多其他人

虽然我与点同意高于约使用日志框架,我仍然倾向于使用System.err输出在一个地方:在关机钩。这是因为我发现,使用java.util.logging框架日志报表时,如果它们出现在关机挂钩并不总是显示。这是因为日志库可能包含它自己的关闭钩子清理日志文件和其他资源,因为你不能依靠在关闭挂钩运行的顺序上,你可以不依赖于预期的工作java.util.logging语句。

检查出的更多信息此链路(“注释”一节)在此。

http://weblogs.java.net/blog/ dwalend /存档/ 2004/05 / shutdown_hooks_2.html

(显然,另一种方法是使用不同的日志框架。)

System.err的是真多用于调试的比什么都重要。适当的异常处理,并与错误的方式,更人性化的优先处理。如果用户意欲查看错误,使用的System.out.println代替。

如果您要跟踪这些错误的从开发者的角度来看,你应该使用的记录器。

写入System.err的事情通常会丧失在运行时,因此它被认为是一种较好的做法是使用一个日志框架是更灵活的何处来输出所述消息,因此它可以被存储为一个文件,并进行分析。

System.err的和System.out的非控制台应用程序只会被运行在他或她的IDE中的代码开发者看到,如果该项目在生产中引发有用的信息可能会丢失。

通信System.err.println和的System.out.println不应被用作loggging接口。 STD-输出和STD-错误(这些由System.out的书面和.ERR)是用于从命令行工具消息。

System.err的打印到控制台。这可能是适合于学生测试他们的家庭作业,但将不适合用于其中这些消息不会被看到(控制台只存储这么多的线)。

的应用程序

一个更好的方法是抛出异常保持通常会被发送到控制台的消息。此另一种方法是使用这将存储其中可以永远被存储在文件中的该消息的第三方记录软件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top