我查看了关于记录器类(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( “你好”)
输出: 你好
答案 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 {...}块中给出了记录器,你也可以找到错误或异常。
答案 3 :(得分:2)
让我举个例子来解释一下。
但是如果我们使用目标日志文件创建一个控制台appender,那么它将被正确记录。
希望我很清楚。 ;)
有关最佳做法,请参阅Do not use System.out.println in server side code或http://www.vipan.com/htdocs/log4jhelp.html
对于他们两者之间的差异,请参阅 Logger vs. System.out.println