概括
在新安装的 Ubuntu 8.04 LTS 64 位上新安装(通过apt-get
)Tomcat 可以工作,但(似乎)没有记录任何内容。另请参阅下面的“我尝试过的东西”和“结束它”。
更多详情
因为包维护人员已经完成了大量的工作,所以让基本工作正常运行是一个相当简单的事情,即运行apt-get
Tomcat 并将其指向正确的 JDK。它有效。但它似乎没有记录任何东西。
据我所知,日志基础设施是通过logging.properties
文件控制的(因为这是 Tomcat 5.5,而不是 Tomcat 5.0),包括位于/etc/tomcat55/logging.properties
(/etc/tomcat55
符号链接为) 的中央文件(您可以针对每个 Web 应用程序覆盖它/var/lib/tomcat55/conf
)。我没有覆盖它,我不明白为什么我没有看到一些东西。这是文件:
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler, 3manager.org.apache.juli.FileHandler, 4admin.org.apache.juli.FileHandler, 5host-manager.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
.handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################
1catalina.org.apache.juli.FileHandler.level = FINE
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.
2localhost.org.apache.juli.FileHandler.level = FINE
2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.FileHandler.prefix = localhost.
3manager.org.apache.juli.FileHandler.level = FINE
3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
3manager.org.apache.juli.FileHandler.prefix = manager.
4admin.org.apache.juli.FileHandler.level = FINE
4admin.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
4admin.org.apache.juli.FileHandler.prefix = admin.
5host-manager.org.apache.juli.FileHandler.level = FINE
5host-manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
5host-manager.org.apache.juli.FileHandler.prefix = host-manager.
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = DEBUG
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.FileHandler
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.FileHandler
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/admin].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/admin].handlers = 4admin.org.apache.juli.FileHandler
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 5host-manager.org.apache.juli.FileHandler
# For example, set the com.xyz.foo logger to only log SEVERE
# messages:
#org.apache.catalina.startup.ContextConfig.level = DEBUG
#org.apache.catalina.startup.HostConfig.level = DEBUG
#org.apache.catalina.session.ManagerBase.level = DEBUG
我所做的唯一更改是:
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = DEBUG
...它被设置为INFO
像所有其他人一样,但我想让它记录一些东西,所以我把它提高到DEBUG
. 自然我已经重新启动了Tomcat。
我可以编译和查看 JSP,所以 Tomcat 又可以工作了,但/var/lib/tomcat5.5/logs
仍然是空的。即使我通过使用无效的 JSP 或类似的东西来强制出错,我也一无所获。
我试过的
- 我已经完成了Tomcat 常见问题解答中列出的步骤,以确保发行版没有搞砸(他们没有)。
- 我已经去其他地方寻找
logs
目录以防万一/var/lib/tomcat5.5/logs
(尽管它是由安装创建的)。 - 自然地,我在进行任何更改后重新启动了 Tomcat。
我没有做的一件事是安装创建 chown
的用户拥有的所有东西。由 拥有,但许多其他目录和文件由 拥有,尽管它们是世界可读的。我没有这样做是因为(垂头丧气)我不太清楚如何完全备份现有树,以便我可以轻松撤消更改。被炸毁的树有绝对的符号链接交织在一起,我知道。我可以把每一个都涂上焦油,但我不确定我没有遗漏什么。tomcat55
logs
tomcat55
root
/etc/tomcat55
/var/lib/tomcat55
/usr/share/tomcat55
编辑:
关闭它
好的,所以我发现它正在将控制台样式的内容写入/var/log/daemon.log
. 哇!至少这给了我一个开始的地方。它发出的投诉如下:
jsvc.exec[18819]: Can't load log handler "2localhost.org.apache.juli.FileHandler"
jsvc.exec[18819]: java.lang.ClassNotFoundException: 2localhost.org.apache.juli.FileHandler
而且我并不感到惊讶,2localhost.org.apache.juli.FileHandler
它不是一个有效的类名(包不能以数字开头!)。所以我怀疑默认logging.properties
文件......不好。会回来汇报的。
我想通了——这个包不能与 Sun 最新的 Java6 包一起工作
sun-java6-jdk
;当你找到它时,修复相当简单:找到 后
daemon.log
,我发现我的问题编辑中列出的错误,但这些只是此错误的副作用:...发生这种情况是因为默认情况下,该程序包使用 Java 安全管理器根据以下设置运行 Tomcat
/etc/init.d/tomcat5.5
:...但是该包没有设置 JULI(默认日志记录实现)的权限,Sun 的最新 Java6 似乎需要该权限才能工作。Java6 的早期版本显然没问题。 tomcat-user 邮件列表上的这个最近的帖子为我指明了正确的方向;有问题的用户收到了上面的错误,最终 Mark Thomas 发现了这个权限:
...从
catalina.policy
. 事实上,如果我将该权限添加到 JULI 部分/etc/tomcat5.5/policy.d/03catalina.policy
并重新启动 Tmocat,错误就会消失,并且我会得到日志文件! 嘘!请注意:如果您还安装
tomcat5.5-webapps
以获取示例、管理器应用程序等,您还需要在03catalina.policy
. 当然,您始终可以选择关闭安全管理器,但这就是它的用途。关于该问题的所有官方错误报告都在这里:https ://bugs.launchpad.net/ubuntu/+source/tomcat5.5/+bug/410379