缺less日志 – Tomcat 5.5 + Ubuntu 8.04

概要

新鲜安装的(通过apt-get )Tomcat在新安装的Ubuntu 8.04 LTS 64位工作,但不(似乎)logging任何东西。 请参阅下面的“ 我试过的东西 ”和“ closures它 ”。

更多详情

因为软件包维护人员已经完成了大量的工作,所以获得基本的工作已经成为运行apt-get并将Tomcat指向正确的JDK的一个相当直接的问题。 它工作。 但它似乎没有logging任何东西。

据我所知,日志logging基础结构是通过logging.properties文件(因为这是Tomcat 5.5,而不是Tomcat 5.0)控制的,包括/etc/tomcat55/logging.properties的中心文件(可以覆盖每个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 ,但我想要logging一些东西 ,所以我把它加到DEBUG 。 自然我已经重新启动Tomcat。

我可以编译和查看一个JSP,所以Tomcat正在工作 ,但/var/lib/tomcat5.5/logs是固执的空。 即使我用一个无效的JSP或者其他的东西来强制错误,我什么也得不到。

我所试过的

  • 我已经完成了Tomcat常见问题解答中列出的步骤,以确保发行版没有搞砸(他们没有)。
  • 我已经去其他地方寻找一个logs目录,以防它不是/var/lib/tomcat5.5/logs (尽pipe这是由安装创build的)。
  • 自然我做了任何更改后重新启动了Tomcat。

还没有做的一件事就是把所有的东西tomcat55安装创build的tomcat55用户拥有。 logstomcat55拥有,但其他一些目录和文件由root拥有,尽pipe它们是世界可读的。 我没有这样做,因为( 挂起头 )我不知道如何完全备份现有的树,所以我可以很容易地撤销这个变化。 被/etc/tomcat55树有绝对符号链接交织在/etc/tomcat55/var/lib/tomcat55/usr/share/tomcat55 我知道 。 我可以把每一个都弄清楚,但是我不确定我不会错过什么东西。

编辑:

closures它

好的,所以我发现它正在写控制台风格的东西给/var/log/daemon.log 。 呼! 至less这给了我一个开始的地方。 这是发出投诉,如:

 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并不适合这个软件包。 当你find它时,修复相当简单:

一旦我find了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) 

…这是因为默认情况下,软件包根据/etc/init.d/tomcat5.5此设置使用Java安全pipe理器运行Tomcat:

 # Use the Java security manager? (yes/no) TOMCAT5_SECURITY=yes 

…但是该软件包没有对JULI(默认的日志logging实现)设置一个权限,即Sun公司最新的Java6似乎需要这个权限才能正常工作。 早期版本的Java6显然是好的。 tomcat用户邮件列表上最近的这个线程指出了我的正确方向。 有问题的用户得到了上面的错误,最终马克·托马斯发现这个权限:

 permission java.lang.RuntimePermission "setContextClassLoader"; 

…从catalina.policy丢失。 实际上,如果我将该权限添加到/etc/tomcat5.5/policy.d/03catalina.policy的JULI部分并重新启动Tmocat,错误消失,并且我得到日志文件! 哈扎

被警告:如果你还安装了tomcat5.5-webapps来获取示例,pipe理器应用程序等,你还需要在03catalina.policy启用其他设置。 当然,你总是可以selectclosures安全pipe理器,但这是它的目的。

所有有关这个问题的官方错误报告在这里: https : //bugs.launchpad.net/ubuntu/+source/tomcat5.5/+bug/410379