不同 Web 应用步伐使用的日志记载框架是独立的。有关更多详情,请参阅类加载。唯一的破例是 java.util.logging。如果您的日志记载库直接或间接地使用了它,那么它的某些元素将在 Web 应用步伐之间共享,因为它是由系统类加载器加载的。
Java 日志记载 API — java.util.logging
Apache Tomcat 具有 java.util.logging API 的几个关键元素的自己的实现。这个实现被称为 JULI。此中的关键组件是一个自定义的 LogManager 实现,它了解正在 Tomcat 上运行的不同 Web 应用步伐(及其不同的类加载器)。它支持每个应用步伐私有的日志记载设置。它还在 Web 应用步伐从内存中卸载时受到 Tomcat 的通知,以便清除对其类的引用,防止内存泄漏。
当启动 Java 时,通过提供特定的系统属性来启用此 java.util.logging 实现。Apache Tomcat 的启动脚本会为您实行此操作,但如果您使用不同的工具来运行 Tomcat(如 jsvc,或在 IDE 中运行 Tomcat),则应自行处理它们。
有关 java.util.logging 的更多详细信息可在 JDK 的文档和其 java.util.logging 包的 Javadoc 页面中找到。
Servlets 日志记载 API
JDK 提供的 java.util.logging 的默认实现过于受限,以至于无法使用。关键限定是无法实现每个 Web 应用步伐的日志记载,因为设置是基于 VM 的。因此,在默认设置下,Tomcat 将更换默认的 LogManager 实现为一个容器友好型的实现,称为 JULI,它解决了这些缺陷。
JULI 支持与标准 JDK java.util.logging 相同的设置机制,使用编程方法或属性文件。重要区别在于可以设置每个类加载器属性文件(如许就可以轻松地重新部署友好的 Web 应用步伐设置),而且属性文件支持扩展结构,允许更自由地定义处理步伐并将其分配给记载器。
JULI 默认启用,并支持每个类加载器设置,除了通例的全局 java.util.logging 设置之外。这意味着日志记载可以在以下层次举行设置: