谁能告诉我,在网络应用程序中,哪种方法是存储日志信息的更好方法。如果我们在内部使用tomcat服务器,日志信息将存储在日志文件中。使用system.out.println(“此处的日志信息”)或log4j日志文件存储日志,记录应用程序数据控制台以进行故障排除的更好方法是什么。在处理大型应用程序时,哪一个性能更好?
jyztefdp1#
logger更好,因为您可以配置附加器、日志文件的大小、日志杠杆、滚动日志文件和许多其他内容。不要将system.out.println用于任何常规项目。只有当您有测试项目来验证java中的某些东西是否像您认为应该的那样工作时,您才能使用它。
nzkunb0c2#
最好使用日志框架(logback,log4j2),因为您可以在不重新编译的情况下微调日志级别。对于exmaple,您发现不需要某些信息—将日志级别从“信息”降低为“错误”。或者您面临问题-增加它以进行调试或跟踪。使用log框架的性能代价很小。必须小心字符串的串联,特别是在禁用日志级别时:
if (log.isDebugEnabled()) { log.debug("Value = " + value); }
lc8prwob3#
使用记录器可能是更好的方法,原因如下:关闭某些日志级别当开发完成时,您可以在调试级别关闭日志,如果您使用s.o.p,则必须注解掉/删除它们随时随地登录您可以轻松地选择登录到文件/电子邮件/sms而无需更改代码,只需更改配置即可。此外,在log4j(1.2)主页上,还提供了一些性能信息:在运行jdk1.3.1、时钟频率为800mhz的amdduron上,确定是否应该记录日志语句需要5纳秒的时间。实际的日志记录也相当快,从使用simplelayout的21微秒到使用ttcclayout的37微秒不等。patternlayout的性能几乎和专用布局一样好,只是它更加灵活。
qmb5sa224#
在处理大型应用程序时,哪一个性能更好?除了使用记录器的明显原因(可定制的输出、过滤、文件处理等),记录器通常会产生更好的性能,原因如下:记录器可以提供有关日志级别的信息,即,如果您必须为调试生成一些昂贵的消息,则如果调试级别不可用,则可以跳过该消息: if( log.isDebugEnabled() ) { log.debug( buildSomeExpensiveOutput() ); } 这只会叫 buildSomeExpensiveOutput() 如果启用了调试级别日志记录,并且如果没有启用,则可以节省成本(例如,在大多数生产系统中)。写入控制台可能会减慢应用程序的速度,因为执行可能是同步的,而大多数记录器是异步写入日志的
if( log.isDebugEnabled() ) { log.debug( buildSomeExpensiveOutput() ); }
buildSomeExpensiveOutput()
4条答案
按热度按时间jyztefdp1#
logger更好,因为您可以配置附加器、日志文件的大小、日志杠杆、滚动日志文件和许多其他内容。不要将system.out.println用于任何常规项目。只有当您有测试项目来验证java中的某些东西是否像您认为应该的那样工作时,您才能使用它。
nzkunb0c2#
最好使用日志框架(logback,log4j2),因为您可以在不重新编译的情况下微调日志级别。对于exmaple,您发现不需要某些信息—将日志级别从“信息”降低为“错误”。或者您面临问题-增加它以进行调试或跟踪。
使用log框架的性能代价很小。必须小心字符串的串联,特别是在禁用日志级别时:
lc8prwob3#
使用记录器可能是更好的方法,原因如下:
关闭某些日志级别
当开发完成时,您可以在调试级别关闭日志,如果您使用s.o.p,则必须注解掉/删除它们
随时随地登录
您可以轻松地选择登录到文件/电子邮件/sms而无需更改代码,只需更改配置即可。
此外,在log4j(1.2)主页上,还提供了一些性能信息:
在运行jdk1.3.1、时钟频率为800mhz的amdduron上,确定是否应该记录日志语句需要5纳秒的时间。实际的日志记录也相当快,从使用simplelayout的21微秒到使用ttcclayout的37微秒不等。patternlayout的性能几乎和专用布局一样好,只是它更加灵活。
qmb5sa224#
在处理大型应用程序时,哪一个性能更好?
除了使用记录器的明显原因(可定制的输出、过滤、文件处理等),记录器通常会产生更好的性能,原因如下:
记录器可以提供有关日志级别的信息,即,如果您必须为调试生成一些昂贵的消息,则如果调试级别不可用,则可以跳过该消息:
if( log.isDebugEnabled() ) { log.debug( buildSomeExpensiveOutput() ); }
这只会叫buildSomeExpensiveOutput()
如果启用了调试级别日志记录,并且如果没有启用,则可以节省成本(例如,在大多数生产系统中)。写入控制台可能会减慢应用程序的速度,因为执行可能是同步的,而大多数记录器是异步写入日志的