我需要记录连接到服务器的用户的活动,我应该使用log4j吗?或者log4j只在开发阶段是有益的?
发布于 2016-06-24 15:57:27
实际上,它们在开发过程中并不特别有用,System.out.println对于大多数开发人员调试日志非常有用,但是一旦部署了以下功能,它们就变得非常有用:
我们的一些代码在每一行上都有跟踪语句。如果我们在开发过程中遇到问题,我们将调试/跟踪语句留在其中,并能够在需要时打开它们--几乎相当于单步遍历部署的代码。此外,大多数方法的顶部都有跟踪或调试语句,显示正在传递的参数和程序流--同样,在调试器不可用的部署系统中,这些语句非常有用。
所以简而言之,是的,它在开发之后是有用的。
编辑(回应评论问题)
举个例子。我正在开发的这个应用程序有20条日志。一种是“性能”,它记录数据的输入,包括时间--有时每秒超过一行。这个日志文件"Rolls“为10 in (大约每小时),但我们使用它来查找数据传递中的滞后。我们甚至使用其他软件来分析这个日志,有时我们会在数据定时中查找模式。
我们有一个单独的“错误”日志,记录所有错误级别的活动。当我们得到一堆其他日志信息时,这个日志不会滚动得太快而丢失数据。
还有另一个日志可以放置与Hibernate/SQL相关的问题,一个用于处理与消息队列相关的问题,另一个用于应用程序间缓存.
所有这些都通过log4j配置文件组合成一个“主”日志。我们可以将任何一个日志重新配置到一个不同的级别(例如,数据源存在身份验证问题,因此我们在该数据源上打开了它的调试级别,以找出服务器环境中发生了哪些变化以导致此问题)
即使一些日志在一个小时内滚动10 max (我们的最大文件大小)。Log4j会将它们滚动到.1和.2文件中,这样我们就可以根据需要保留10-50个。
所有这些都是通过配置文件完成的,并且可以在部署后进行更改,而无需重新构建系统。
编辑2--另一个想法
使用log4j和java日志接口的另一个有用点是,使用它的hibernate之类的库可以通过xml文件进行配置,而无需重新构建。
如果没有Log4j/java的日志API,您可以使用一个自定义API来控制日志,B)只有默认日志记录,或者C)没有来自该子系统的日志记录。但是,由于Hibernate使用java的API,所以可以在标准的、有文档化的xml配置文件中为"Hibernate“日志信息设置日志级别,甚至可以将其日志重新路由到数据库或其他日志设备。
发布于 2016-06-24 15:58:14
日志记录对于定位在生产代码中发生的错误尤其有用。在开发期间,您可以使用更强大的工具,如调试器。
当然,您必须意识到日志记录可能会影响性能,并会创建巨大的文件。这就是为什么像log4j这样的工具可以被配置为打开和关闭日志记录,或者控制它的冗长。
可以使用log4j,因为它是Java最常见的库。然而,我个人认为它的配置有点单一。
发布于 2016-06-24 16:09:04
使用记录器(如Log4j )的另一个原因是允许不同组件的日志记录级别不同。如果打开所有的日志,日志就会变得非常大和混乱。如果您知道要在日志中“放大”哪个区域的代码,则可以单独设置该区域的日志记录。
https://stackoverflow.com/questions/38017416
复制相似问题