第 19 章 ZK之外

目录

Logger
如何使用ZK配置日志等级
i3-log.conf的内容
i3-log.conf的位置
禁用所有日志
DSP
iDOM

除了处理ZUML页面,ZK发行版包括了许多技术和工具。本章提供了一些关于它们的基本信息。感兴趣的读者可以参考Javadoc 获取详细的 API。

Logger

Package: org.zkoss .util.logging.Log

ZK使用的logger基于标准的logger,java.util.Logger。但是,我们将其包装成 org.zkoss.util.logging.Log ,以使其更高效。典型的使用方法如下。

import org.zkoss.util.logging.Log;
class MyClass {
   private static final Log log = Log.lookup(MyClass.class);
   public void f(Object v) {
      if (log.debugable()) log.debug("Value is "+v);
   }
}

由于ZK使用了标准的 logger记录消息,通过配置你使用Web 服务器的logging,可以控制记录什么。如何配置Web 服务器的logging依服务器的不同而不同。请参考手册。或者,你可以使用ZK提供的logging配置机制,如下所述。

[注]: 默认情况下,所有的ZK log实例都会被映射到同一个名为o r g.zkoss 的 Java logger,主要为了获得更好的性能。若你想控制日志级别以适于个别类(If you want to control the log level up to individual class),则必须要调用下面的语句来打开对于等级(hierarchy)的支持。

Log.setHierarchy(true);

[注]: 若你使用WEB-INF/zk.xml配置了日志级别,就像在下面章节描述的那样,等级支持会被自动禁用。

如何使用ZK配置日志等级

除了配置Web服务器的logging,你可以使用ZK提供的logging 配置机制。默认是禁用的。为启用它,你必须在WEB-INF/zk.xml内指定下列内容。更多细节请参考the Developer's Reference 的附录B(Appendix B)。

<zk>
   <log>
         <log-base>org.zkoss</log-base>
   </log>
</zk>

另外,通过调用LogServiceinit方法,你可以手动启用logging 配置机制,如下。

org.zkoss.util.logging.LogService.init("org.zkoss", null);

若你不仅想记录org.zkoss而是所有,可以为log-base指定空。

一旦启用了此机制,通过在启动时搜索类路径(classpath)和一些特定的位置(见下面),ZK会搜寻i3-log.conf。若找到了,ZK会加载它的内容并初始化日志级别。然后,ZK会一直监视次此文件,若文件被修改则会重新加载此文件内容。

i3-log.conf的内容

i3-log.conf 的一个事例如下。

org.zkoss.zk.ui.impl.UiEngineImpl=FINER
   #Make the log level of the specified class to FINERorg.zkoss.zk.ui.http=DEBUG
   #Make the log level of the specified package to DEBUG
org.zkoss.zk.au.http.DHtmlUpdateServlet=INHERIT
   #Clear the log level of a specified class such that it inherits what

   #has been defined above (Default: INFO)
org.zkoss.zk.ui=OFF

   #Turn off the log for the specified package
org.zkoss=WARNING

   #Make all log levels of ZK classes to WARNING except those specified here

被允许的级别

级别

描述

OFF

表示没有消息。

ERROR

表示提供错误信息。

WARNING

表示提供警告信息。也隐含着ERROR。

INFO

表示提供信息性的消息。也隐含着ERROR和WARNING。

DEBUG

表示提供用于调试目的的跟踪信息。也隐含着ERROR,WARNING 和 INFO。

FINER

表示提供用于调试目的的相当详细的跟踪信息。也隐含着ERROR,WARNING, INFO 和 DEBUG。

INHERIT

表示明确任何为指定包或类设置的等级。换言之,日志等级与其父结点相同。

i3-log.conf的位置

首先,ZK会在类路径(classpath)查找此文件。若未找到,则会在conf目录查找。

应用程序服务器

位置

Tomcat

i3-log.conf置于$TOMCAT_HOME/conf 目录。

其它

首先试试conf目录。若不工作,你可以设置被称为org.zkoss.io.conf.dir 系统属性目录作为放置i3-log.conf的目录(you could set the system property called the org.zkoss.io.conf.dir directory to be the directory where i3-log.conf resides)。

禁用所有日志

一些日志会在加载i3-log.conf之前产生。若你想完全禁用所有日志,则必须配置Web服务器[67]的 logging,或当配置WEB-INF/web.xml内的DHtmlLayoutServlet时指定log-level。细节请参考the Developer's Reference。

<servlet>
   <servlet-name>zkLoader</servlet-name>
   <servlet-class>org.zkoss.zk.ui.http.DHtmlLayoutServlet</servlet-class>
   <init-param>
      <param-name>log-level</param-name>
      <param-value>OFF</param-value>
   </init-param>
...



[67] 记住ZK使用标准的logging功能。除非你在 i3-log.conf内指定了一些内容 ,默认的logging级别取决于Web服务器(通常为INFO)。