Log4j和println对于简单便利程序有何区别?

4
我写了一个简单的Java程序(50-60行),以帮助我自己的开发。它是通过命令行调用的,基本上下载一些文件并解密。它不是任何产品的一部分。我认为它可能对我们组中的其他开发人员有用,因此我将其提交进行代码审查。回复意见是我需要将 System.out.println 改为 log4j。
输出包括每个下载文件的名称和完成时的消息。
这是否有点过头?我认为是这样的。

@Hemant Metalia:这种格式正常吗? - zw324
@ZiyaoWei 我只是想强调问题中的重要点。 - Hemant Metalia
这可能更适合于 programmers.stackexchange.com。 - Miserable Variable
4个回答

2

看起来你正在寻求意见,这可能会被标记为关闭,但与此同时我同意,println非常适用。然而,调试和信息消息通常会发送到System.err而不是System.out。


1

如果你想让别人重用你的代码,你需要使用某种日志记录器。如果你要使用一个日志记录器,我建议使用SLF4J而不是log4j。这将允许一些下游开发者使用实现或绑定了SLF4J API(log4j、java.util.logging、logback等)的任何日志框架来使用你的代码。

如果你不在意有人重用你的代码,并且这是一个独立产品,那么是的,这可能是过度设计。


+1 指出了重复使用的因素。但是 @user1166233,无疑应该使用 Log4J 而不是 SLF4J。 - Perception
你知道有哪些命令行程序使用stdout和stderr进行日志记录吗?仅打印一些文件名和完成消息似乎没有意义。我并不希望其他人完全按照我编写的程序来使用,只是想节省其他人从头开始重写类似程序的工作量。 - user1166233

0

你打印到 System.out 的任何内容都会被发送到“标准输出”,你可以将其重定向到文件以进行进一步分析,但这非常不灵活。

如果使用 System.out,你无法过滤要发送到标准输出的内容... 所有内容都会被打印出来。通过使用任何日志框架,如 SLF4JCommons Logging 或者 log4j,你可以设置不同的日志级别。

基本上,你不想看到每个调试消息。你可以使用记录器设置各种日志级别,例如 WARNINGDEBUGINFO


当然可以过滤掉发送到 System.out 的内容。这就是过滤器的作用,从 stdin 读取并写入 stdout。 - jcomeau_ictx
我的意思是使用“日志记录器”更方便。例如,如果我将日志记录级别更改为警告,则不再显示调试和信息消息。因此,现在我对我的日志记录有更多的控制。 - RanRag
好的,明白了。我会在适当的情况下使用日志记录,但对于简单的命令行脚本,通常更喜欢使用标准输出/错误。 - jcomeau_ictx
我也喜欢在小型应用程序中使用stdout/stderr。但我认为使用日志记录器是一个好习惯。 - RanRag
我应该补充一下,我并不希望任何人完全按照我编写的程序来使用它。它是为我目前正在解决的问题量身定制的。但我认为其他人也会需要类似的东西,并且从不必从头开始受益。 - user1166233

0

可能有点过度,但具体情况而定。

当你说这个软件是为了自己的开发而制作的,但后来你将其发布给你的开发人员组时,实际上是在说这个软件最初有一个功能,现在又有了另一个功能。主要功能是为你服务,次要功能(也是最终功能)是为团队/社区服务。

*如果你的开发人员组有代码标准,我希望有的话,如果其中一个标准是使用log4j记录所有内容,那么你应该遵循这些标准。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接