Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Logger和System.out.println之间有什么区别_Java_Logging - Fatal编程技术网

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

Java Logger和System.out.println之间有什么区别,java,logging,Java,Logging,我查找了关于logger类()的api,并查看了logger.info方法。当我看到它的周长是一条显示为字符串public void info(string msg)的消息时,我感到困惑,它与System.out.println()相同。我想知道这两者之间有什么不同,为什么我们使用Logger而不是System.out.println,因为它们可以打印出相同的内容 在记录器中 Logger.info(“你好”) 输出: [INFO ] 2015-08-07 11:18:46.140 [main]

我查找了关于logger类()的api,并查看了
logger.info
方法。当我看到它的周长是一条显示为字符串
public void info(string msg)
的消息时,我感到困惑,它与
System.out.println()相同。我想知道这两者之间有什么不同,为什么我们使用Logger而不是
System.out.println
,因为它们可以打印出相同的内容

在记录器中

Logger.info(“你好”)

输出:

[INFO ] 2015-08-07 11:18:46.140 [main] ClassName Hello
In
System.out.println

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

输出:
Hello

通常,因为可以将
记录器
配置为写入文件(和控制台)。对于消息传递,还可以在更高(或更低)的粒度上配置它。例如,您可以(在运行时)配置警告级别。在这种情况下,记录器不会显示调试或信息消息。它可以包含诸如正在写入的类、行号以及(消息的)日期和时间等信息。

使用记录器可以提取出大量细节,并做比写入标准输出更多的事情

  • 您可以指定要写入的不同目的地。不同的附加器写入文件、在给定时间段内滚动文件、写入队列或数据库等

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

  • 您可以选择缓冲输出的appender,这样多个线程就可以登录,而不用让线程争用控制台对象上的锁

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

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


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

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

也要通过这个

  • 但是当我们使用任何日志机制(log4j、slf4j、logback等)时,我们 为每个附件配置附加器和相应的目标日志文件 包裹默认情况下,除非您 显式地将其配置为登录到目标。
  • System.out.println始终将消息记录到控制台附加程序。 因此,只有当我们确定控制台appender 在记录器配置文件中配置。否则我们就完蛋了 在服务器控制台上登录日志是不正确的。任何来自 在应用程序内部,应转到相应的应用程序日志 而不是服务器日志
让我举例说明

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

希望我是清楚的

有关最佳实践,请参阅或

有关两者之间的差异,请参阅

记录器可以格式化,您可以控制输出(基于级别),您可以输出到不同的位置(文件、标准输出、数据库等)可能重复的可能重复的是否存在性能差异?因为我看到在浏览器上执行的操作与控制台中的
syso
来得晚之间存在延迟。