概括
apt-get
在新安装的 Ubuntu 8.04 LTS 64 位上新安装的 Tomcat (通过) 可以运行,但 (似乎) 不会记录任何内容。另请参阅“我尝试过的方法“ 和 ”接近目标“ 以下。
更多详情
由于软件包维护人员已经做了大量的工作,因此让基本功能正常工作是一件相当简单的事情,只需运行apt-get
Tomcat 并将其指向正确的 JDK 即可。而且它确实有效。但它似乎没有记录任何内容。
据我所知,日志记录基础结构是通过logging.properties
文件控制的(因为这是 Tomcat 5.5,而不是 Tomcat 5.0),包括一个位于 ( 的中央文件(您可以按 Web 应用程序覆盖它)/etc/tomcat55/logging.properties
符号/etc/tomcat55
链接为/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
...不好。会报告。
答案1
我明白了——包裹里没有相当与 Sun 最新的 Java6 包配合使用sun-java6-jdk
;当您找到它时,修复相当简单:
一旦我找到daemon.log
,我就会发现我在问题编辑中列出的错误,但这些只是这个错误的副作用:
jsvc.exec[18819]: Could not load Logmanager "org.apache.juli.ClassLoaderLogManager"
jsvc.exec[18819]: java.security.AccessControlException: access denied (java.lang.RuntimePermission setContextClassLoader)
...发生这种情况的原因是,该包默认按照以下设置使用 Java 安全管理器运行 Tomcat /etc/init.d/tomcat5.5
:
# Use the Java security manager? (yes/no)
TOMCAT5_SECURITY=yes
...但包裹没有设置 JULI(默认日志记录实现)的权限,Sun 的最新 Java6 似乎需要该权限才能正常工作。Java6 的早期版本显然没有问题。 最近这个帖子在 tomcat-user 邮件列表上为我指明了正确的方向;那里有问题的用户遇到了上述错误,最终 Mark Thomas 发现这个权限:
permission java.lang.RuntimePermission "setContextClassLoader";
... 遗漏了catalina.policy
。事实上,如果我将该权限添加到的 JULI 部分/etc/tomcat5.5/policy.d/03catalina.policy
并重新启动 Tmocat,错误就会消失,并且我会得到日志文件! 哈扎!
请注意:如果您还安装了tomcat5.5-webapps
示例、管理器应用程序等,则需要启用其他设置03catalina.policy
。当然,您始终可以选择关闭安全管理器,但这就是它的为了。
答案2
关于该问题的所有官方错误报告都在这里:https://bugs.launchpad.net/ubuntu/+source/tomcat5.5/+bug/410379