java.util.logging.ErrorManager: 1

本文记录了一次Tomcat启动后迅速出现错误的情况,通过日志分析发现端口冲突问题,并最终通过修改配置解决了该问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tomcat跑起来,等一会就报错

java.util.logging.ErrorManager: 1

java.lang.NullPointerException
at org.apache.juli.FileHandler.publish(FileHandler.java:137)
at java.util.logging.Logger.log(Logger.java:458)
at java.util.logging.Logger.doLog(Logger.java:480)
at java.util.logging.Logger.logp(Logger.java:596)
at org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:165)
at org.apache.juli.logging.DirectJDKLog.info(DirectJDKLog.java:115)
at org.apache.coyote.http11.Http11Protocol.pause(Http11Protocol.java:220)
at org.apache.catalina.connector.Connector.pause(Connector.java:1073)
at org.apache.catalina.core.StandardService.stop(StandardService.java:563)
at org.apache.catalina.core.StandardServer.stop(StandardServer.java:744)
at org.apache.catalina.startup.Catalina.stop(Catalina.java:633)
at org.apache.catalina.startup.Catalina$CatalinaShutdownHook.run(Catalina.java:676)
May 14, 2014 1:32:19 PM org.apache.coyote.http11.Http11Protocol pause
INFO: Pausing Coyote HTTP/1.1 on http-8083
May 14, 2014 1:32:20 PM org.apache.catalina.core.StandardService stop
INFO: Stopping service Catalina
[INFO] [2014-05-14 13:32:20.020]  [ Class = org.springframework.context.support.AbstractApplicationContext | Method = doClose | Line = 1025 ] | Closing WebApplicationContext for namespace 'actionDispatcher-servlet': startup date [Wed May 14 13:28:05 CST 2014]; root of context hierarchy |
[INFO] [2014-05-14 13:32:20.020]  [ Class = org.springframework.orm.hibernate3.AbstractSessionFactoryBean | Method = destroy | Line = 246 ] | Closing Hibernate SessionFactory |
May 14, 2014 1:32:21 PM org.apache.coyote.http11.Http11Protocol destroy
INFO: Stopping Coyote HTTP/1.1 on http-8083



我那个是因为端口被占用,但是实际上发现那几个端口都没有被用,我找到了那几个端口的配置删了,然后重启服务,然后就好了

Microsoft Windows [版本 10.0.19045.5608] (c) Microsoft Corporation。保留所有权利。 C:\Users\XIN>catalina.bat run Using CATALINA_BASE: "C:\Program Files\apache-tomcat-9.0.97" Using CATALINA_HOME: "C:\Program Files\apache-tomcat-9.0.97" Using CATALINA_TMPDIR: "C:\Program Files\apache-tomcat-9.0.97\temp" Using JRE_HOME: "C:\Program Files\Java\jdk-17" Using CLASSPATH: "C:\Program Files\apache-tomcat-9.0.97\bin\bootstrap.jar;C:\Program Files\apache-tomcat-9.0.97\bin\tomcat-juli.jar" Using CATALINA_OPTS: "" NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED java.util.logging.ErrorManager: 4 java.io.FileNotFoundException: C:\Program Files\apache-tomcat-9.0.97\logs\catalina.2025-03-23.log (拒绝访问。) at java.base/java.io.FileOutputStream.open0(Native Method) at java.base/java.io.FileOutputStream.open(FileOutputStream.java:293) at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:235) at org.apache.juli.FileHandler.openWriter(FileHandler.java:447) at org.apache.juli.FileHandler.<init>(FileHandler.java:121) at org.apache.juli.FileHandler.<init>(FileHandler.java:108) at org.apache.juli.AsyncFileHandler.<init>(AsyncFileHandler.java:79) at org.apache.juli.AsyncFileHandler.<init>(AsyncFileHandler.java:74) at org.apache.juli.AsyncFileHandler.<init>(AsyncFileHandler.java:70) at org.apache.juli.AsyncFileHandler.<init>(AsyncFileHandler.java:66) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructo
最新发布
03-24
<think>好的,我现在需要解决用户提到的Tomcat 9.0.97在运行catalina.bat run时出现的FileNotFoundException,访问被拒绝的问题,尤其是日志文件的权限问题,用户使用的是JDK 17。首先,我需要分析可能的原因,然后逐步给出解决方案。 首先,用户提到的是日志文件创建失败,错误是拒绝访问。这可能涉及到文件或目录的权限问题。Tomcat在启动时通常会尝试创建或写入日志文件,如果目标目录没有足够的权限,就会导致这个问题。常见的日志目录是Tomcat安装目录下的logs文件夹,比如C:\Program Files\Apache Software Foundation\Tomcat 9.0\logs。需要检查这个目录是否存在,以及当前运行Tomcat的用户是否有写入权限。 接下来,用户可能是在Windows系统下运行Tomcat,所以需要考虑Windows的权限设置。可能用户将Tomcat安装在系统保护目录(如Program Files)下,而普通用户权限可能不足以写入该目录。这时候,建议将Tomcat安装到用户有完全控制权的目录,比如D:\tomcat,或者修改logs目录的权限,授予用户完全控制权。 另外,用户提到使用的是JDK 17,需要注意Tomcat 9.0.97与JDK 17的兼容性。根据Tomcat的官方文档,Tomcat 9.0.x需要JDK 8或更高版本,所以JDK 17应该是兼容的。但可能某些库或配置需要调整,比如日志处理相关的库是否支持JDK 17。不过,权限问题更可能是直接原因,可以先处理权限问题,再考虑其他可能性。 用户之前提到的引用中,有关于修改logging.properties文件来改变控制台编码的例子。这可能暗示用户已经尝试过修改日志配置,但可能配置有误。需要检查conf/logging.properties文件中的日志处理程序配置,特别是关于日志文件的路径和权限设置。例如,检查是否有指定日志文件的路径,该路径是否可写。 另外,用户可能尝试将日志输出到某个没有权限的位置,比如系统盘根目录,或者某个需要管理员权限的目录。在logging.properties中,可以配置不同的Handler,比如FileHandler的目录,默认是${catalina.base}/logs,需要确认该路径是否正确,并且Tomcat进程有写入权限。 还有可能是防病毒软件或安全软件阻止了Tomcat写入日志文件,这时候需要暂时禁用这些软件进行测试,或者将Tomcat目录添加到白名单中。 另一个可能性是,之前的Tomcat实例没有正确关闭,导致日志文件被占用,无法再次写入。这时候需要检查是否有残留的Tomcat进程,并结束这些进程后再尝试启动。 此外,用户提到的引用[3]中提到了部署到Tomcat 6.0,但用户当前使用的是Tomcat 9.0.97,可能存在配置迁移的问题。如果用户是从旧版本升级而来,可能需要检查旧配置文件是否有不兼容的地方,特别是日志相关的配置。 解决方案步骤可能包括: 1. 检查Tomcat的logs目录权限,确保运行Tomcat的用户有写入权限。 2. 修改Tomcat安装目录到非系统保护目录,避免权限限制。 3. 检查logging.properties中的配置,确保日志路径正确且可写。 4. 以管理员身份运行Tomcat,测试是否解决问题。 5. 检查是否有其他进程占用日志文件,结束相关进程。 6. 更新Tomcat或JDK版本,确保兼容性。 7. 检查防病毒软件设置,排除干扰。 在实施这些步骤时,需要逐一测试,找出具体的根本原因。例如,如果以管理员身份运行Tomcat后问题解决,说明是权限不足的问题,需要调整目录权限。如果修改日志目录路径后问题解决,说明原路径不可写。 此外,用户可能没有正确配置环境变量,比如CATALINA_HOME或CATALINA_BASE,导致Tomcat尝试写入错误的目录。需要检查这些环境变量的设置是否正确,指向正确的Tomcat安装路径。 最后,如果所有配置都正确,可能需要查看详细的错误日志(如果有的话)来进一步诊断问题。例如,查看控制台输出的完整错误信息,确定具体的拒绝访问的文件路径,从而针对性解决。</think>### 解决Tomcat日志文件权限问题的分步指南 #### 1. 检查日志目录权限 Tomcat默认日志目录为`${catalina.base}/logs`(例如`C:\Program Files\Apache Software Foundation\Tomcat 9.0\logs`)。 - **操作步骤**: 1. 右键点击`logs`文件夹 → 选择“属性” → 切换到“安全”选项卡。 2. 检查当前用户(如`Users`组)是否有**完全控制**权限。若无,点击“编辑”添加权限[^1]。 3. 若目录不存在,手动创建并赋予权限。 #### 2. 避免系统保护目录安装 将Tomcat安装到非系统目录(如`D:\tomcat`),避免权限限制。 - **操作步骤**: 1. 卸载当前Tomcat,重新安装到自定义路径。 2. 确保安装目录及其子目录(如`logs`、`temp`)有写入权限。 #### 3. 修改日志配置文件 检查`conf/logging.properties`中日志路径配置: ```properties # 示例配置 handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler 1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs ``` - **操作步骤**: 1. 确认`directory`指向的路径是否存在且可写。 2. 若需自定义路径,改为绝对路径(如`D:\tomcat-logs`)并确保权限正确[^2]。 #### 4. 以管理员身份运行Tomcat - **Windows**: ```bat :: 右键点击cmd或PowerShell → 以管理员身份运行 cd %CATALINA_HOME%\bin catalina.bat run ``` - **Linux**: ```bash sudo ./catalina.sh run ``` #### 5. 检查进程占用 - **Windows**: ```bat tasklist /FI "IMAGENAME eq java*" taskkill /F /PID <进程ID> ``` #### 6. 验证环境变量 确保`CATALINA_HOME`和`JAVA_HOME`配置正确: ```bat echo %CATALINA_HOME% # 应输出Tomcat安装路径 echo %JAVA_HOME% # 应输出JDK 17路径 ``` #### 7. 测试JDK 17兼容性 Tomcat 9.0.x官方支持JDK 8+,但需确认`JRE_HOME`指向JDK 17的`jre`目录: ```bat set JRE_HOME=%JAVA_HOME%\jre ``` #### 8. 临时关闭安全软件 若上述步骤无效,尝试禁用防病毒软件或防火墙,排除拦截可能性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值