关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。
28天前关门了。
改进这个问题
我是一个有2年经验的java程序员初学者。我正在用java为人类用户创建一个小型cli工具(服务器程序不调用)。我的java代码被我公司的代码嗅探工具标记了。工具说我不应该用 System.out
我应该考虑改用log4j。
我在网上搜索了很多,但几乎每个帖子都是以“…system.out通常用于快速登录,但是,诸如此类,所以你应该避免使用它”。
他们怎么会这么想 System.out
总是用于日志记录?甚至没有人提到它的任何其他可能的用例。
假设你正在开发一个新的 grep
对于linux shell。你必须把模式匹配的结果打印给用户,对吗?我只是无法想象你会用log4j来做那件事。
所以,简单地说,我应该完全忘记 System.out
? 在java中,您将使用什么来输出非日志信息?
3条答案
按热度按时间bzzcjhmw1#
这是一个代码气味问题,但日志记录可能不是首选的选择。我更喜欢接受流参数,以使编写单元测试更容易。例如:
hjqgdpho2#
当你开发一个规模大于5的团队的更大的应用程序时。你必须使用一个框架来记录。对于其他人来说,更容易找到问题的根源是很重要的。
system.out可以在非常小的应用程序或小的团队中使用,在这些应用程序或团队中,您可以进行基本的交流,但不建议使用system.out,因为您希望看到日志,解释为什么应用程序会与相应的数据崩溃,而不是控制台打印输出指出有问题,但是你不知道这是在哪个班级发生的,因为你的队友编码了那个特定的班级。
wdebmtf23#
第一,
System.out
不是测井输出的目标,除了非常小的工具或一些一次性的东西;这就是日志框架被发明的原因。在这里,不管您是选择log4j、jdk日志还是其他完全不同的东西,一开始都不重要。尽管log4j是java世界中事实上的日志标准。因为那些“代码嗅探器”总是假设(除非另行通知)您编写了某种服务器软件,所以当您使用输出时,它们会发出警告
System.out
因为对于这样的服务器,打印到System.out
或者/dev/nul
…但是,如果您编写了某种命令行工具(可能是一个批处理客户机到一个服务器,只是为了有另一个示例而不是grep…),那么完全可以将当前状态或其他输出写入
System.out
(即使“嗅探者”还在呻吟)“状态”在这里主要是指正反馈;任何错误消息都应该被记录到日志子系统中,尽管将它们打印到屏幕上也是一个好主意。通常你可以注解你的源代码来安抚“嗅觉探测器”…