缺少日志 - Tomcat 5.5 + Ubuntu 8.04

缺少日志 - Tomcat 5.5 + Ubuntu 8.04

概括

apt-get在新安装的 Ubuntu 8.04 LTS 64 位上新安装的 Tomcat (通过) 可以运行,但 (似乎) 不会记录任何内容。另请参阅“我尝试过的方法“ 和 ”接近目标“ 以下。

更多详情

由于软件包维护人员已经做了大量的工作,因此让基本功能正常工作是一件相当简单的事情,只需运行apt-getTomcat 并将其指向正确的 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所有。归所有,但其他一些目录和文件归所有,尽管它们是世界可读的。我没有这样做,因为(tomcat55logstomcat55root垂头丧气)我不太清楚如何完全备份现有树,以便我可以随时撤消更改。该死的树有绝对符号链接交织在一起/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

相关内容