相对路径FileNotFoundException

问题描述 投票:0回答:2

我在项目上创建了两个不同的java项目,依赖于其他项目并且

就像 A 项目和 B 项目 A 项目有日志文件夹,在 log4j.xml 中我给出了日志文件的相对路径 现在我在 B 项目中使用 A 项目作为 api,并且我已经创建了 B 项目的可执行 jar,当我调用 B 时,它给了我 FileNotFoundException。

请推荐我......

log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: ..\Framework\logs\log.log (The system cannot find the path specified)
    at java.io.FileOutputStream.openAppend(Native Method)
    at java.io.FileOutputStream.<init>(Unknown Source)
    at java.io.FileOutputStream.<init>(Unknown Source)
    at org.apache.log4j.FileAppender.setFile(FileAppender.java:273)
    at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:152)
    at org.apache.log4j.DailyRollingFileAppender.activateOptions(DailyRollingFileAppender.java:206)
    at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:247)
    at org.apache.log4j.xml.DOMConfigurator.parseAppender(DOMConfigurator.java:210)
    at org.apache.log4j.xml.DOMConfigurator.findAppenderByName(DOMConfigurator.java:140)
    at org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfigurator.java:153)
    at org.apache.log4j.xml.DOMConfigurator.parseChildrenOfLoggerElement(DOMConfigurator.java:415)
    at org.apache.log4j.xml.DOMConfigurator.parseRoot(DOMConfigurator.java:384)
    at org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.java:783)
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:666)
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:616)
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:602)
    at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:460)
    at org.apache.log4j.LogManager.<clinit>(LogManager.java:113)
    at com.netapp.ca.framework.logger.LogImpl.<init>(LogImpl.java:35)
    log4j:ERROR Either File or DatePattern options are not set for appender [allLog].
log4j:ERROR setFile(null,true) call failed.
java path log4j relative-path
2个回答
0
投票

我认为您是从 jar 执行的,因此(当然)路径是错误的,因为您无法(通常)在 jar 中保存日志文件。

我遇到了同样的问题,并解决了编写以下方法来接收我的应用程序可以工作的路径:

String applicationPath = this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
applicationPath = applicationPath.replace('\\', '/');
if (applicationPath.startsWith("file:")) applicationPath = applicationPath.substring(5);
if (applicationPath.contains(".jar")) {
    String[] parts = applicationPath.split("/");
    applicationPath = applicationPath.replaceAll(parts[parts.length - 1], "");
}

我不知道您的应用程序是如何构造的,但我认为这段代码可以帮助您。只需将“applicationPath”写入控制台,您就知道该路径出了什么问题。我打赌这可能是罐子问题。


0
投票

不清楚您要做什么,但简单来说,Log4J 似乎找不到您在

log4j.xml
配置中指定的日志文件。

在为 Log4J 指定日志目录时最好使用绝对路径,但如果您坚持使用相对路径,请确保您绝对确定哪个目录是您的应用程序的“工作目录”。

您可以使用以下代码记录应用程序的工作目录(将其放入您的 Java 可执行文件,

main
方法):

System.out.println(System.getProperty("user.dir"));

一旦知道工作目录,您就可以在

log4j.xml
配置中更新日志文件路径。

© www.soinside.com 2019 - 2024. All rights reserved.