性能问题 System.out.println( " log information " ) 还是使用 log4j 记录器文件?



谁能告诉我在web应用程序中哪一个是更好的方式来存储日志信息。如果我们在内部使用tomcat服务器,日志信息将存储在日志文件中。记录应用程序数据控制台以排除故障的更好方法是使用system.out。Println("此处的日志信息")或log4j日志文件来存储日志。当我们处理大型应用程序时,哪一个提供更好的性能?

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

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

  • 日志记录器可以提供日志级别的信息,例如,如果您必须为调试构建一些昂贵的消息,如果调试级别不可用,您可以跳过它:

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

    这只会在启用调试级别日志记录的情况下调用buildSomeExpensiveOutput(),如果没有(例如在大多数生产系统中),则会节省该成本。

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

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

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

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

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

使用日志记录器可能是更好的方法,原因如下:

关闭某些日志级别

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

日志任何

你可以很容易地选择登录到一个文件/电子邮件/短信而不改变你的代码,你只需要改变配置。

同样,从log4j(1.2)主页,给出了一些性能信息:

在运行JDK 1.3.1的800Mhz的AMD Duron上,决定是否应该记录日志语句大约需要5纳秒。实际的日志记录也相当快,从使用SimpleLayout的21微秒到使用TTCCLayout的37微秒不等。PatternLayout的性能几乎和专用布局一样好,除了它更灵活。

最新更新