【问题标题】:What is the difference between Java Logger and System.out.printlnJava Logger 和 System.out.println 有什么区别
【发布时间】:2015-10-30 09:45:02
【问题描述】:

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

在记录器中。

Logger.info("Hello")

输出:

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

System.out.println

`System.out.println("你好")

输出: 你好

【问题讨论】:

标签: java logging


【解决方案1】:

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

【讨论】:

  • 有性能差异吗?因为我看到在浏览器上执行的操作和syso 在控制台中迟到之间存在延迟。
【解决方案2】:

使用记录器可以让您抽象出很多细节,做的事情比写入标准输出要多得多。

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

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

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

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

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

【讨论】:

    【解决方案3】:

    Logger 和 System.out.println 之间的主要区别是
    Logger: 在文件中打印文本(文本文件)
    System.out.println: 在控制台中打印输出

    Logger在您进行任何 LIVE 项目时很有用。
    因为如果开发和部署了任何项目,那么您无法检查控制台。那时,Logger 将有助于跟踪您的项目流程,如果您在 catch{...} 块中提供了 logger,您也可以找到错误或异常。

    也可以通过这个Logger vs. System.out.println

    【讨论】:

      【解决方案4】:
      • 但是当我们使用任何日志记录机制(log4j、slf4j、logback 等)时,我们 为每个配置附加程序和相应的目标日志文件 包裹。默认情况下控制台附加程序是关闭的,除非你 显式配置它以记录到目标。
      • System.out.println 始终将消息记录到控制台附加程序。 因此,只有在我们确定控制台附加程序时才应该使用它 在记录器配置文件中配置。否则我们最终 在服务器控制台上记录了不正确的日志。来自的任何日志 应用里面应该去对应的应用日志 而不是服务器日志。

      让我用一个例子来解释。

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

      但是如果我们创建了一个带有目标日志文件的控制台附加程序,那么它将被正确记录。

      希望我很清楚。 ;)

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

      两者的区别请参考 Logger vs. System.out.println

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-04
        • 2014-10-16
        • 2023-02-20
        • 2017-09-04
        • 1970-01-01
        • 2011-06-02
        • 2010-09-19
        相关资源
        最近更新 更多