Java Logger和System.out.println之间有什么区别
我查找了关于logger类()的api,并查看了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.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
InSystem.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
来得晚之间存在延迟。