【问题标题】:log4j over System.out.printlnlog4j 通过 System.out.println
【发布时间】:2015-09-07 17:23:50
【问题描述】:

使用log4j 优于System.out.Println 的性能优势是什么? 仅供参考:我知道log4j 有多个附加程序、调试日志记录和System.Out.println 没有的其他功能,并且也适用于类级别并且用于更大的应用程序。 但如果我有一个小型应用程序,假设文件将log4j 将提供比System.Out.println 更好的性能。 log4j 内部如何运作?

【问题讨论】:

  • 这个问题太宽泛了。一般来说,日志记录的任何性能影响都被它提供的可配置性和灵活性所掩盖,这是公认的。仅供参考,使用 log4j 2 需要 2 nanoseconds 不记录消息。如果需要日志,那么日志本身的写入将远远大于框架强加的成本。

标签: java log4j


【解决方案1】:

Log4j 无权提高性能。创建它是为了具有更多减少日志量和指定日志输出的能力。想象一个 Tomcat 服务器,它记录了大量的休眠数据库访问。例如。使用日志级别,您可以停止通过此信息日志对服务器造成压力。但这不是“本机”性能优势,因为您可以在 sysos 之前通过标志检查来模拟这一点。

【讨论】:

    【解决方案2】:

    我能想到的唯一一种情况是,使用log4jSystem.out.println 具有性能优势,例如,如果这样做:

    logger.debug("Logging something");
    

    不要这样做:

    System.out.println("Logging something");
    

    然后您以不需要记录调试消息的方式配置日志记录级别。 在这种情况下,第一行实际上不会记录,但第二行仍会写入 System.out。

    在所有其他情况下(我的意思是,在所有实际完成日志记录的情况下)我认为使用 log4j 性能方面不会更快。

    通常出于您所述的所有原因使用它,并且因为性能没有那么不同(与在文件上写入内容实际花费的时间相比,框架开销很小)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-13
      • 2014-02-24
      • 2010-09-13
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多