日志记录是软件开发中的一个重要主题,特别是如果您需要分析生产环境中的错误和其他意外事件。实现日志记录通常很容易。但正如您可能经历过的那样,日志记录远比看起来复杂得多。这就是为什么你可以在博客上找到很多关于它的文章。
作为一名经验丰富的开发人员,您应该了解可用的不同日志框架,常见缺陷和最佳实践,当然还有常见部署方案中使用的日志文件类型。在本文中,我将重点关注后者。我将告诉您几乎所有开发或生产环境中可以找到的四种不同类型的日志。
应用程序日志 让我们从最常见的日志类型开始:应用程序日志。
大多数开发人员在谈论日志记录时会想到这个日志。原因很简单。他们的应用程序生成此日志 它包含应用程序编写的各种错误消息,警告或其他事件。这些消息可以提供与特定用例相关的逻辑高级信息。典型的例子是:
用例中发生的异常的堆栈跟踪。
有关外部系统响应时间较慢的警告消息。
用例被触发或完成的信息。
应用程序日志可能是本文中提到的最重要的日志类型,因为您可以完全控制它。这意味着您负责编写消息。
每条日志消息都需要提供有用的信息,以帮助您了解应用程序的行为。如果您想了解有关应用程序日志的更多信息,您应该查看Eric的文章,其中描述了一组用于应用程序日志记录的最佳实践。
Web和应用程序服务器日志 下一个有趣且重要的类型是您的Web或应用程序服务器的日志。
大多数企业应用程序都部署到Web服务器(例如 Apache Tomcat)或应用程序服务器(例如 Wildfly或WebSphere Liberty)。他们的日志文件为您提供有关技术问题和服务器当前状态的信息。
每个服务器的配置和功能各不相同,我在本文中不会详细解释它们。但请务必检查服务器的文档并进行相应配置。从服务器获取正确的信息可以在识别潜在问题和服务器中断之间产生差异。
垃圾收集器日志 所述垃圾收集器提供自动存储器管理。它跟踪JVM中实例化的所有对象,并删除不再使用的对象。这是一项非常复杂的任务,并且有几种不同的垃圾收集器实现可用。
通常,Java中的垃圾收集过程非常有效。它非常高效,有很多应用程序使用默认实现及其标准配置。但是,如果您的应用程序必须处理高负载或使用大量复杂的对象结构,则应用程序的性能可能会随着时间的推移而降低。当垃圾收集器需要花费越来越多的时间来管理可用内存时,通常会发生这种情况。垃圾收集器日志为您提供分析所有垃圾收集器活动的必要信息。
默认情况下,垃圾收集器日志已停用。您需要使用一组命令行属性来激活它。
如果您使用的是JDK 8或更早版本,则可以使用以下属性执行此操作:
从JDK 9开始,您需要使用以下属性:
class = “prettyprint” - Xlog:gc *:file = < gc - log - file - path >
使用这些命令行属性启动应用程序后,垃圾收集器将写入有关所有操作的详细信息。遗憾的是,生成的垃圾收集器日志的内容和格式取决于JVM的供应商和版本以及垃圾收集算法。
系统日志 所有先前讨论的日志都是由JVM或在JVM中运行的应用程序编写的。除了这些日志之外,您还应该熟悉操作系统编写的日志。
作为Java开发人员,您很可能永远不会自己写这些日志。但是,您的操作系统会将某些事件写入这些日志。作为部署的一部分的其他应用程序也可以这样做。因此,系统日志是获取外部事件概述的好地方。
如果您在Windows上运行应用程序,则这是事件日志。在Linux上,您应该了解syslog服务及其后继者。
Windows事件日志 Windows的事件日志包含类别应用程序,安全性,设置,系统和转发事件中的重要硬件和软件事件。
应用程序事件和系统类别对于了解应用程序之外发生的事件特别有用。应用程序类别包含由本地Windows系统上运行的其他应用程序报告的事件。硬件和驱动程序相关事件属于系统类别。
您可以在本文中了解有关Windows事件日志的更多信息。
Linux系统日志记录 Linux的syslog服务及其后续版本提供了一个高度可配置的日志记录系统。它将应用程序或操作系统触发的消息写入文件或将其发送到远程系统。
使用的日志记录服务及其配置取决于您的Linux发行版。请查看文档以了解有关特定操作系统的更多信息。