Java日志终极指南日志终极指南
Java日志基础
Java使用了一种自定义的、可扩展的方法来输出日志。虽然Java通过java.util.logging包提供了一套基本的日志处理API,但你
可以很轻松的使用一种或者多种其它日志解决方案。这些解决方案尽管使用不同的方法来创建日志数据,但它们的最终目标是
一样的,即将日志从你的应用程序输出到目标地址。
在这一节中,我们会探索Java日志背后的原理,并说明如何通过日志来让你成为一个更好的Java开发人员。
Java日志组件
Java日志API由以下三个核心组件组成:
Loggers:Logger负责捕捉事件并将其发送给合适的Appender。
Appenders:也被称为Handlers,负责将日志事件记录到目标位置。在将日志事件输出之前,Appenders使用Layouts来对事
件进行格式化处理。
Layouts:也被称为Formatters,它负责对日志事件中的数据进行转换和格式化。Layouts决定了数据在一条日志记录中的最终
形式。
当Logger记录一个事件时,它将事件转发给适当的Appender。然后Appender使用Layout来对日志记录进行格式化,并将其发
送给控制台、文件或者其它目标位置。另外,Filters可以让你进一步指定一个Appender是否可以应用在一条特定的日志记录
上。在日志配置中,Filters并不是必需的,但可以让你更灵活地控制日志消息的流动。
日志框架
在Java中,输出日志需要使用一个或者多个日志框架,这些框架提供了必要的对象、方法和配置来传输消息。Java在
java.util.logging包中提供了一个默认的框架。除此之外,还有很多其它第三方框架,包括Log4j、Logback以及tinylog。还有其
它一些开发包,例如SLF4J和Apache Commons Logging,它们提供了一些抽象层,对你的代码和日志框架进行解耦,从而允
许你在不同的日志框架中进行切换。
如何选择一个日志解决方案,这取决于你的日志需求的复杂度、和其它日志解决方案的兼容性、易用性以及个人喜好。
Logback基于log4j之前的版本开发(版本1),因此它们的功能集合都非常类似。然而,Log4j在最新版本(版本2)中引用了
一些改进,例如支持多API,并提升了在用Disruptor库的性能。而tinylog,由于缺少了一些功能,运行特别快,非常适合小项
目。
另外一个考虑因素是框架在基于Java的各种不同项目上的支持程度。例如Android程序只能使用Log4j、Logback或者第三方包
来记录日志, Apache Tomcat可以使用Log4j来记录内部消息,但只能使用版本1的Log4j。
抽象层
诸如SLF4J这样的抽象层,会将你的应用程序从日志框架中解耦。应用程序可以在运行时选择绑定到一个特定的日志框架(例
如java.util.logging、Log4j或者Logback),这通过在应用程序的类路径中添加对应的日志框架来实现。如果在类路径中配置
的日志框架不可用,抽象层就会立刻取消调用日志的相应逻辑。抽象层可以让我们更加容易地改变项目现有的日志框架,或者
集成那些使用了不同日志框架的项目。
配置
尽管所有的Java日志框架都可以通过代码进行配置,但是大部分配置还是通过外部配置文件完成的。这些文件决定了日志消
息在何时通过什么方式进行处理,日志框架可以在运行时加载这些文件。在这一节中提供的大部分配置示例都使用了配置文
件。
java.util.logging
默认的Java日志框架将其配置存储到一个名为 logging.properties 的文件中。在这个文件中,每行是一个配置项,配置项使用
点标记(dot notation)的形式。Java在其安装目录的lib文件夹下面安装了一个全局配置文件,但在启动一个Java程序时,你
可以通过指定 java.util.logging.config.file 属性的方式来使用一个单独的日志配置文件,同样也可以在个人项目中创建和存储
logging.properties 文件。
下面的示例描述了如何在全局的logging.properties文件中定义一个Appender:
评论0
最新资源