Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 像log4j这样的日志工具是否只在开发阶段有用?_Java_Logging_Log4j_Log4j2 - Fatal编程技术网

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将