Java Logger和System.out.println之间有什么区别

时间:2015-08-07 03:49:39

标签: java logging

我查看了关于记录器类(here)的api,我正在查看Logger.info方法。当我看到它的边界显示为字符串public void info(String msg)并与System.out.println()相同时,我感到很困惑。我想知道这两者之间有什么不同,为什么我们在打印出相同的东西时会使用Logger而不是System.out.println

在Logger中。

Logger.info("Hello")

输出:

[INFO ] 2015-08-07 11:18:46.140 [main] ClassName Hello

System.out.println

`的System.out.println( “你好”)

输出:   你好

4 个答案:

答案 0 :(得分:14)

通常,因为Logger可以配置为写入文件(和控制台)。它也可以在更高(或更低)的粒度上配置消息传递。例如,您可以配置(在运行时) warn 的级别。在这种情况下,该looger不会显示 debug info 消息。它可以包括诸如正在写的类,行号以及(消息的)日期和时间等信息。

答案 1 :(得分:9)

使用记录器可以抽象出很多细节,并且可以比写入stdout做更多的事情。

  • 您可以指定要写入的不同目的地。不同的appender写入文件,将文件滚动给定时间段,写入队列或数据库等。

  • 您可以为日志消息指定一致的格式,而不必将其添加到您写入stdout的每一行。

  • 您可以选择一个缓冲输出的appender,以便多个线程可以记录而不会让线程争用控制台对象上的锁。

  • 您可以按类别(通常是包和类名)和日志级别(跟踪,调试,信息,错误,致命)进行过滤,以便轻松配置要查看的日志消息和你想忽略它。通过日志记录,您可以更改记录器属性中的配置,或在应用程序中包含一个页面,以更改即时过滤的内容。

  • 除了将消息写入滚动文件或其他任何内容之外,您可以混合和匹配这些内容,例如,设置特定的smtp appender以通过电子邮件发送日志消息以记录错误级别或更高级别。

答案 2 :(得分:3)

Logger和System.out.println之间的主要区别是
Logger:打印文件中的文本(文本文件)
System.out.println:在控制台中打印输出<登记/>
当您进行任何LIVE项目时,Logger非常有用。
因为如果开发和部署任何项目,则无法检查控制台。那时Logger对于跟踪项目流程非常有用。如果你在catch {...}块中给出了记录器,你也可以找到错误或异常。

同时浏览此Logger vs. System.out.println

答案 3 :(得分:2)

  • 但是当我们使用任何日志记录机制(log4j,slf4j,logback等)时 为每个配置appender和相应的目标日志文件 包。默认情况下,控制台appender将关闭,除非您 明确配置它以记录到目的地。
  • System.out.println始终将消息记录到控制台appender。 因此,只有在我们确定控制台appender时才应该使用它 在记录器配置文件中配置。否则我们结束了 将日志记录在服务器控制台上是不正确的。来自的任何日志 应用程序内部应该转到相应的应用程序日志 而不是服务器日志。

让我举个例子来解释一下。

  • 如果我们正在构建一个名为Tracker的应用程序,使用日志记录机制在tomcat容器中运行,我们为目标日志文件配置了应用程序日志记录的appender作为tracker-application.log,我们没有配置控制台appender。
  • 然后,如果JVM遇到System.out.println,那么日志将转到tomcat服务器的服务器日志,这是错误的,因为服务器日志应该只有服务器而不是应用程序的信息。

但是如果我们使用目标日志文件创建一个控制台appender,那么它将被正确记录。

希望我很清楚。 ;)

有关最佳做法,请参阅Do not use System.out.println in server side codehttp://www.vipan.com/htdocs/log4jhelp.html

对于他们两者之间的差异,请参阅 Logger vs. System.out.println