性能问题是System.out.println(“日志信息”)还是使用log4j logger文件?

时间:2014-03-11 13:56:57

标签: java web log4j

任何人都可以在Web应用程序中告诉我哪种方式更好地存储日志信息。如果我们在内部使用tomcat服务器,则日志信息将存储在日志文件中。通过使用system.out.println(此处为“log information”)或log4j日志文件来存储日志,记录应用程序数据控制台以进行故障排除的更好方法是什么。 当我们处理大型应用程序时,哪一个能提供更好的性能?

4 个答案:

答案 0 :(得分:2)

Logger更好,因为您可以配置appender,日志文件的大小,日志杆,滚动日志文件和许多其他东西。 不要将System.out.println用于任何常规项目。只有在你有测试项目来验证Java中的某些东西是否像你认为的那样工作时,你才能使用它。

答案 1 :(得分:2)

  

当我们处理大型应用程序时,哪一个能提供更好的性能?

除了使用记录器的明显原因(可自定义输出,过滤,文件处理等)之外,记录器通常会产生更好的性能,原因如下:

  • 记录器可以提供有关日志级别的信息,即如果你需要构建一些昂贵的消息进行调试,如果调试级别不可用,你可以跳过它:

    if( log.isDebugEnabled() ) { log.debug( buildSomeExpensiveOutput() ); }

    如果启用了调试级别日志记录,则只会调用buildSomeExpensiveOutput(),如果不是,则会节省成本(例如,在大多数生产系统中)。

  • 写入控制台可能会降低应用程序的速度,因为执行可能会同步,而大多数记录器会异步写入日志

答案 2 :(得分:1)

使用日志框架(logback,log4j2)要好得多,因为您可以在不重新编译的情况下微调日志级别。例如,您发现您不需要某些信息 - 将信息级别从信息降低到错误。或者您遇到问题 - 将其增加到调试或跟踪。

使用日志框架的性能成本很小。您必须小心串联字符串,尤其是在禁用日志级别的情况下:

if (log.isDebugEnabled()) {
    log.debug("Value = " + value);
}

答案 3 :(得分:1)

出于多种原因,使用记录器可能是更好的方法:

关闭某些日志级别

您可以在开发完成时关闭调试级别的日志,如果您使用了s.o.p,则必须注释/删除它们

随时记录

您可以轻松选择在不更改代码的情况下登录文件/电子邮件/短信,只需更改配置即可。

此外,从log4j(1.2) home page开始,我们会给出一些表现信息:

  

在运行JDK 1.3.1的时钟为800Mhz的AMD Duron上,确定是否应记录日志记录语句需要大约5纳秒。实际记录也非常快,使用SimpleLayout时为21微秒,使用TTCCLayout时为37微秒。 PatternLayout的性能几乎与专用布局一样好,只是它更灵活。