C3P0报错。FileNotFoundException: Resource not found at path '/mchange-commons.properties'

本文针对 C3P0 连接池的日志级别配置问题进行了解答,指出将其设置为 DEBUG 级别会导致大量冗余信息输出,并推荐使用 INFO 级别。同时建议将自定义应用程序的日志级别设为 DEBUG 以便于调试。
网上搜了下,看到有个老外出了这个问题,发邮件不知道是不是给c3p0的开发团队,回复如下
hi,

you are logging c3p0 libs at DEBUG levels. c3p0 / com.mchange libs are intended to be logged at INFO. you’ll get a lot of superfluous information, including Exception stack traces, if you log at less restrictive levels than INFO.

c3p0 and its supporting libraries permit configuration resources to be put in a variety of places, including the resource-path '/mchange-commons.properties’. c3p0 looks in those places. at DEBUG levels, it reports not finding anything there, and the Exception that signals failing to find anything.

please set your log level for com.mchange libs to INFO. turn on DEBUG level logging only when you have an issue to investigate (and ideally do so selectively, for particular classes or packages, to avoid a firehose of unwanted information).
However, I’d recommend that you set INFO as the default (it’s how most third-party libraries expect to be logged), and make the Exception your own application, which should log at DEBUG. Suppose that your application lives in the package edu.cmu.aforget. Then…


意思很明白,这是警告,不是异常,别把c3p0的日志级别搞成debug。大多数第三方开源软件的建议都是info级别,你自己的可以是debug,如果你把第三方的这些都搞成debug了,那活该你出异常
set home JAVA_HOME=/bea/jdk1.8.0_411 PATH=/bea/jdk1.8.0_411/jre/bin:/bea/jdk1.8.0_411/bin:/usr/bin:/bin CLASSPATH=.:/data/getDaliCpn/Application/classes:/data/getDaliCpn/Config:/data/getDaliCpn/Application/lib/activation.jar:/data/getDaliCpn/Application/lib/classes12.jar:/data/getDaliCpn/Application/lib/commons-beanutils-1.6.1.jar:/data/getDaliCpn/Application/lib/commons-codec-1.9.jar:/data/getDaliCpn/Application/lib/commons-collections-2.1.jar:/data/getDaliCpn/Application/lib/commons-digester-1.5.jar:/data/getDaliCpn/Application/lib/commons-digester.jar:/data/getDaliCpn/Application/lib/commons-httpclient-3.0.jar:/data/getDaliCpn/Application/lib/commons-httpclient-3.1.jar:/data/getDaliCpn/Application/lib/commons-jexl-1.0.jar:/data/getDaliCpn/Application/lib/commons-lang-2.6.jar:/data/getDaliCpn/Application/lib/commons-lang3-3.9.jar:/data/getDaliCpn/Application/lib/commons-logging.jar:/data/getDaliCpn/Application/lib/db_util.jar:/data/getDaliCpn/Application/lib/dom4j.jar:/data/getDaliCpn/Application/lib/ews-java-api-2.0.jar:/data/getDaliCpn/Application/lib/excelutils.jar:/data/getDaliCpn/Application/lib/freemarker-2.3.3.jar:/data/getDaliCpn/Application/lib/ftp.jar:/data/getDaliCpn/Application/lib/httpclient-4.5.jar:/data/getDaliCpn/Application/lib/httpcore-4.4.1.jar:/data/getDaliCpn/Application/lib/javacsv-2.0.jar:/data/getDaliCpn/Application/lib/joda-time-2.8.jar:/data/getDaliCpn/Application/lib/jsoup-1.15.4.jar:/data/getDaliCpn/Application/lib/jxl.jar:/data/getDaliCpn/Application/lib/jxls-core-0.9.3-SNAPSHOT.jar:/data/getDaliCpn/Application/lib/jxls-reader-0.9.3-SNAPSHOT.jar:/data/getDaliCpn/Application/lib/log4j-1.2.8.jar:/data/getDaliCpn/Application/lib/mail.jar:/data/getDaliCpn/Application/lib/ofbcore-entity.jar:/data/getDaliCpn/Application/lib/ofbcore-service.jar:/data/getDaliCpn/Application/lib/ofbcore-share.jar:/data/getDaliCpn/Application/lib/poi-3.12-sources.jar:/data/getDaliCpn/Application/lib/poi-ooxml-3.12-sources.jar:/data/getDaliCpn/Application/lib/poi-ooxml-schemas-3.12.jar:/data/getDaliCpn/Application/lib/poi-ooxml-3.12.jar:/data/getDaliCpn/Application/lib/poi-3.12.jar:/data/getDaliCpn/Application/lib/smics-sap.jar:/data/getDaliCpn/Application/lib/spire.xls-5.1.5.jar:/data/getDaliCpn/Application/lib/xmlbeans-2.3.0.jar System environment has been set. Start running program at 2025/12/11 18:35:03. moduleName:SJ_CUST_MAIL_IN log4j:WARN No appenders could be found for logger (com.smics.apps.textfileprocessor.service.TextFileProcessorService). log4j:WARN Please initialize the log4j system properly. fieldLengthInt->[1] 【MV1】 OM9067S1A1.BT DPS需求4500013389制令单-MA0931A3-FPAH-251211-SJ-60086EA4500013389制令单-MA0931A3-FPAH-251211-SJ-60086EA.xlsx java.io.FileNotFoundException: /data/EnterpriseApp/FtpFiles/QILIANSHAN/NEWFTWO/4500013389制令单-MA0931A3-FPAH-251211-SJ-60086EA.xlsx (File name too long) at java.io.FileOutputStream.open0(Native Method) at java.io.FileOutputStream.open(FileOutputStream.java:270) at java.io.FileOutputStream.<init>(FileOutputStream.java:213) at java.io.FileOutputStream.<init>(FileOutputStream.java:162) at microsoft.exchange.webservices.data.property.complex.FileAttachment.load(FileAttachment.java:233) at com.smics.apps.textfileprocessor.service.DaliShipmentCpnService.getCustMail(DaliShipmentCpnService.java:2032) at com.smics.apps.textfileprocessor.service.TextFileProcessorService.startFileProcess(TextFileProcessorService.java:227) at com.smics.apps.textfileprocessor.jsms.jobClient.main(jobClient.java:25) WO_AB1_20251211-90_ENGWO_AB1_20251211-90_ENG.XLSX 2178 [main] INFO service.TextFileProcessorService - READ SJ_CUST_MAIL_IN end
最新发布
12-13
<think>根据用户的问题,需要解决两个主要问题: 1. log4j未初始化警告:WARN No appenders could be found for logger 2. 文件名称过长导致的FileNotFoundException: File name too long 结合引用的内容,特别是引用[4]提到了log4j的警告,引用[2]和引用[3]提到了FileNotFoundException,我们可以综合给出解决方案。 ### 问题1: log4j未初始化警告 引用[4]中提到了`No appenders could be found for logger`的警告。这通常是因为log4j没有正确配置,无法找到日志输出器(appender)。解决方法包括: - 确保在类路径(classpath)中有一个log4j的配置文件(如log4j.properties或log4j.xml)。 - 配置文件中需要定义至少一个appender和一个root logger。 例如,一个简单的log4j.properties文件内容如下: ``` log4j.rootLogger=DEBUG, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n ``` 如果已经存在配置文件,需要检查文件路径是否正确,并且确保在程序启动时能够被加载。可以通过设置系统属性来指定配置文件的位置,例如: ```java System.setProperty("log4j.configuration", "file:/path/to/your/log4j.properties"); ``` 另外,引用[4]中提到了添加Java启动参数来设置扩展目录,但这里更关键的是确保配置文件被正确加载。 ### 问题2: FileNotFoundException: File name too long 这个错误通常是因为文件路径(包括目录和文件名)的长度超过了操作系统的限制。在Windows系统中,路径长度限制通常是260个字符(MAX_PATH),而在Unix-like系统中则通常更长,但也可能有限制。 解决方法: 1. **缩短文件路径**:将文件移动到更浅的目录层次中,或者缩短文件名。 2. **使用相对路径**:尽量使用相对路径而不是绝对路径,因为绝对路径往往较长。 3. **在Windows上启用长路径支持**(如果适用): - 在Windows 10及以上版本,可以启用长路径支持。具体方法: - 打开组策略编辑器(gpedit.msc) - 依次选择:计算机配置 -> 管理模板 -> 系统 -> 文件系统 - 启用“启用Win32长路径” - 或者修改注册表:在`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem`下,将`LongPathsEnabled`设置为1。 4. **使用Java的NIO.2 API**:Java 7及以上版本引入了`java.nio.file`包,可以支持更长的路径。例如: ```java Path path = Paths.get("your/very/long/path"); Files.createDirectories(path); // 创建目录 Files.write(path.resolve("filename"), data); // 写文件 ``` 使用NIO.2 API可以绕过操作系统的路径长度限制,因为它会自动处理长路径(在Windows上会使用`\\\\?\\`前缀)。 ### 综合解决方案 1. 对于log4j警告,检查并配置log4j,确保配置文件被正确加载。 2. 对于文件名过长的问题: - 首先尝试缩短路径或文件名。 - 如果无法缩短,考虑启用操作系统的长路径支持(如果是Windows)。 - 在代码中使用NIO.2 API来操作文件。 ### 示例代码片段(使用NIO.2) ```java import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class FileExample { public static void main(String[] args) { try { // 使用NIO.2创建长路径 Path longPath = Paths.get("a", "very", "long", "path", "that", "exceeds", "the", "normal", "length", "limit"); Files.createDirectories(longPath); Path file = longPath.resolve("myfile.txt"); Files.write(file, "Hello, World!".getBytes()); } catch (Exception e) { e.printStackTrace(); } } } ``` §§相关问题§§ 1. 如何在Java中配置log4j以避免未初始化警告? 2. Java中如何处理文件路径过长的问题? 3. 在Windows系统上如何启用长路径支持? 4. Java NIO.2相比传统的FileIO有什么优势? </think> ### 解决 log4j 未初始化警告和文件路径过长问题 #### 一、log4j 未初始化警告解决方案 **问题现象**: 日志输出 `WARN No appenders could be found for logger`,表明 log4j 未找到有效的日志输出配置[^4]。 **解决步骤**: 1. **添加配置文件** 在 `src/main/resources` 下创建 `log4j.properties` 文件,基础配置示例: ```properties log4j.rootLogger=INFO, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n ``` 2. **检查依赖** 确保 Maven 包含 log4j 依赖(以 log4j 1.x 为例): ```xml <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> ``` 3. **指定配置文件路径** 若配置文件不在默认路径,启动时需显式指定: ```bash java -Dlog4j.configuration=file:/path/to/log4j.properties -jar your_app.jar ``` #### 二、文件路径过长错误解决方案 **问题现象**: `java.io.FileNotFoundException: File name too long` 通常发生在路径超过系统限制(如 Windows 的 260 字符限制)[^2][^3]。 **解决步骤**: 1. **缩短文件路径** - 移动文件到更浅的目录(如 `C:\project` 代替嵌套目录) - 使用短文件名(8.3 格式),例如: ```java File file = new File("C:\\PROJ~1\\data.txt"); // 短路径格式 ``` 2. **启用长路径支持(Windows)** - **方法1**:注册表修改 路径:`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem` 添加 `DWORD` 值 `LongPathsEnabled = 1` - **方法2**:组策略修改 启用:`计算机配置 > 管理模板 > 系统 > 文件系统 > 启用 Win32 长路径` 3. **使用 Java NIO.2 API** 通过 `java.nio.file` 绕过路径长度限制: ```java Path path = Paths.get("\\\\?\\C:\\very\\long\\path\\file.txt"); // Windows 前缀 Files.write(path, "data".getBytes()); ``` 4. **优化临时文件处理** 若涉及临时文件(如引用[2]的 `AppData\Local\Temp` 问题): ```java // 使用系统临时目录并缩短文件名 File tempFile = File.createTempFile("tmp_", ".dat", new File("C:\\short_path")); ``` #### 三、综合建议 1. **路径长度检查工具** 使用此方法在运行时验证路径: ```java Path path = Paths.get("your/file/path"); if (path.toString().length() > 240) { // 预留系统前缀空间 throw new RuntimeException("Path exceeds limit: " + path); } ``` 2. **日志系统初始化验证** 在程序入口添加检查: ```java import org.apache.log4j.Logger; public class Main { static { if (!Logger.getRootLogger().getAllAppenders().hasMoreElements()) { System.err.println("Log4j not configured!"); } } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值