谁能告诉我在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的性能几乎和专用布局一样好,除了它更灵活。