我应该使用system.out或log4j来打印正常的信息吗?

ffdz8vbo  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(400)

关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。

28天前关门了。
改进这个问题
我是一个有2年经验的java程序员初学者。我正在用java为人类用户创建一个小型cli工具(服务器程序不调用)。我的java代码被我公司的代码嗅探工具标记了。工具说我不应该用 System.out 我应该考虑改用log4j。
我在网上搜索了很多,但几乎每个帖子都是以“…system.out通常用于快速登录,但是,诸如此类,所以你应该避免使用它”。
他们怎么会这么想 System.out 总是用于日志记录?甚至没有人提到它的任何其他可能的用例。
假设你正在开发一个新的 grep 对于linux shell。你必须把模式匹配的结果打印给用户,对吗?我只是无法想象你会用log4j来做那件事。
所以,简单地说,我应该完全忘记 System.out ? 在java中,您将使用什么来输出非日志信息?

bzzcjhmw

bzzcjhmw1#

这是一个代码气味问题,但日志记录可能不是首选的选择。我更喜欢接受流参数,以使编写单元测试更容易。例如:

public class Greeter {

    public void greet(String name, PrintWriter out) {
        out.print("Hello, " + name);
    }

}

public class GreeterProgram {

    public static void main(String[] args) {
        new Greeter().greet(args[0], new PrintWriter(System.out));
    }

}

public class GreeterTest {

    @Test
    public void testGreet() {
        StringWriter sw = new StringWriter();
        PrintWriter out = new PrintWriter(sw);
        new Greeter().greet("Zhou", out);
        out.flush();
        assertEquals("greeting", "Hello, Zhou", sw.toString());
    }
}
hjqgdpho

hjqgdpho2#

当你开发一个规模大于5的团队的更大的应用程序时。你必须使用一个框架来记录。对于其他人来说,更容易找到问题的根源是很重要的。
system.out可以在非常小的应用程序或小的团队中使用,在这些应用程序或团队中,您可以进行基本的交流,但不建议使用system.out,因为您希望看到日志,解释为什么应用程序会与相应的数据崩溃,而不是控制台打印输出指出有问题,但是你不知道这是在哪个班级发生的,因为你的队友编码了那个特定的班级。

wdebmtf2

wdebmtf23#

第一, System.out 不是测井输出的目标,除了非常小的工具或一些一次性的东西;这就是日志框架被发明的原因。在这里,不管您是选择log4j、jdk日志还是其他完全不同的东西,一开始都不重要。尽管log4j是java世界中事实上的日志标准。
因为那些“代码嗅探器”总是假设(除非另行通知)您编写了某种服务器软件,所以当您使用输出时,它们会发出警告 System.out 因为对于这样的服务器,打印到 System.out 或者 /dev/nul
但是,如果您编写了某种命令行工具(可能是一个批处理客户机到一个服务器,只是为了有另一个示例而不是grep…),那么完全可以将当前状态或其他输出写入 System.out (即使“嗅探者”还在呻吟)“状态”在这里主要是指正反馈;任何错误消息都应该被记录到日志子系统中,尽管将它们打印到屏幕上也是一个好主意。
通常你可以注解你的源代码来安抚“嗅觉探测器”…

相关问题