- java/
- Java 像log4j这样的日志工具是否只在开发阶段有用?
Java 像log4j这样的日志工具是否只在开发阶段有用?
Java 像log4j这样的日志工具是否只在开发阶段有用?,java,logging,log4j,log4j2,Java,Logging,Log4j,Log4j2,我需要记录连接到我的服务器的用户的活动,我应该使用log4j吗?或者log4j只在开发阶段有用吗
是(或任何其他日志框架/)
没有
是(或任何其他日志框架/)
没有
它们在开发期间实际上并不特别有用,System.out.println对于大多数开发人员调试日志记录非常有用,但一旦部署,以下功能将变得非常有用:
滚动日志文件,使其不会变得太大,从而允许连续无维护操作
添加时间/日期,以便您可以查看特定时间段的日志
动态更改详细信息(您并不总是需要跟踪或调试信息,但在系统运行不正常时能够打开这些
我需要记录连接到我的服务器的用户的活动,我应该使用log4j吗?或者log4j只在开发阶段有用吗
是(或任何其他日志框架/)
没有
是(或任何其他日志框架/)
没有
它们在开发期间实际上并不特别有用,System.out.println对于大多数开发人员调试日志记录非常有用,但一旦部署,以下功能将变得非常有用:
- 滚动日志文件,使其不会变得太大,从而允许连续无维护操作
- 添加时间/日期,以便您可以查看特定时间段的日志
- 动态更改详细信息(您并不总是需要跟踪或调试信息,但在系统运行不正常时能够打开这些信息可能是一个救命稻草)
- 将日志文件重新路由到更容易访问的位置。。。Log4j可以将您的日志发送到各种数据库或其他位置,以便在实际无法直接访问服务器时使用
我们的一些代码在每一行上都有跟踪语句。如果我们在开发时遇到问题,我们将调试/跟踪语句保留在中,并能够在需要在生产中打开它们——几乎相当于单步执行部署的代码。此外,大多数方法的顶部都有trace或debug语句,显示传入的参数和程序流——同样,只有在调试器不可用的部署系统中才真正有用
总之,是的,它在开发之后是有用的
编辑(回应评论问题)--
举个例子。我正在开发的应用程序现在有20个日志。一个是“性能”,它记录输入的数据,包括计时——有时每秒超过一行。这个日志文件以10mb(大约每小时一次)的速度“滚动”,但我们使用它来查找数据传输中的延迟。我们甚至有时使用其他软件来分析日志,以寻找数据定时的模式
我们有一个单独的“错误”日志,记录所有错误级别的活动。当我们获取一堆其他日志信息时,这个日志不会滚动得太快,以至于丢失数据
还有另一个日志记录与Hibernate/SQL相关的问题,一个日志记录与消息队列相关的问题,另一个日志记录与应用程序间缓存相关的问题
这些都通过log4j配置文件合并到一个“main”日志中。我们可以将任何一个日志重新配置到不同的级别(例如,我们在数据源上遇到身份验证问题,因此我们在该数据源上打开了它的调试级别,以找出服务器环境中发生的更改导致了该问题)
即使有些日志在一小时内滚动10mb(我们的最大文件大小)。Log4j将把它们放入.1和.2文件中,这样我们可以根据需要保留10-50个
所有这些都是通过配置文件完成的,并且可以在部署后进行更改,而无需重建系统
编辑2——另一个想法
关于使用log4j和java日志接口的另一个有用的观点是,像hibernate这样使用它的库可以通过xml文件进行配置,而无需重建
如果没有Log4j/java的日志API,您可以A)使用自定义API来控制日志,B)只有默认日志,或者C)没有来自该子系统的日志。但是,由于Hibernate使用java的API,因此您可以在标准的、有文档记录的xml配置文件中设置“Hibernate”日志信息的日志级别,甚至可以将其日志重新路由到数据库或其他日志设备。它们在开发过程中实际上并不特别有用,System.out.println对于大多数开发人员调试日志记录来说都非常有用,但一旦部署,以下功能将变得非常有用:
- 滚动日志文件,使其不会变得太大,从而允许连续无维护操作
- 添加时间/日期,以便您可以查看特定时间段的日志
- 动态更改详细信息(您并不总是需要跟踪或调试信息,但在系统运行不正常时能够打开这些信息可能是一个救命稻草)
- 将日志文件重新路由到更容易访问的位置。。。Log4j可以将您的日志发送到各种数据库或其他位置,以便在实际无法直接访问服务器时使用
我们的一些代码在每一行上都有跟踪语句。如果我们在开发时遇到问题,我们将调试/跟踪语句保留在中,并能够在需要在生产中打开它们——几乎相当于单步执行部署的代码。此外,大多数方法的顶部都有trace或debug语句,显示传入的参数和程序流——同样,只有在调试器不可用的部署系统中才真正有用
总之,是的,它在开发之后是有用的
编辑(回应评论问题)--
举个例子。我正在开发的应用程序现在有20个日志。一个是“性能”,它记录输入的数据,包括计时——有时每秒超过一行。这个日志文件以10mb(大约每小时一次)的速度“滚动”,但我们使用它来查找数据传输中的延迟。我们甚至有时使用其他软件来分析日志,以寻找数据定时的模式
我们有一个单独的“错误”日志,记录所有错误级别的活动。当我们获取一堆其他日志信息时,这个日志不会滚动得太快,以至于丢失数据
还有另一个日志记录与Hibernate/SQL相关的问题,一个日志记录与消息队列相关的问题,另一个日志记录与应用程序间缓存相关的问题
这些都通过log4j配置文件合并到一个“main”日志中。我们可以将任何一个日志重新配置到不同的级别(例如,我们在数据源上遇到身份验证问题,因此我们在该数据源上打开了它的调试级别,以找出服务器环境中发生的更改导致了该问题)
即使有些日志在一小时内滚动10mb(我们的最大文件大小)。Log4j将