2016-11-12 60 views
0

我已經試過對此工作了幾個小時,仍然無法正確完成,所以我想我會問。我正在嘗試使用log4j將程序語句寫入輸出文件,並在本地機器上正常工作。Runnable Jar消失的源文件夾

我目前在名爲logging的文件夾中有我的log4j.properties文件。它被標記爲源文件夾。當通過eclipse生成我的可運行JAR文件時,我將它放在另一臺服務器上運行,它說無法找到log4j.properties文件。到目前爲止,我嘗試了一些不同的事情,沒有任何工作。我想要做的就是確保log4j.properties文件包含在可運行JAR中。我的設置現在是以下內容。

Project foler - called test 

-logging\log4j.properties. 

在我的Java程序中,我有以下代碼在本地工作。我錯過了Eclipse中JAR生成過程中的一些基本步驟嗎?似乎這應該很容易,但現在它不正確。我甚至在創建完7zip文件後解壓JAR文件,果然,日誌文件根本就不存在。它因爲某種原因完全消失了。如果有人能幫助我,我將不勝感激,謝謝。

public static void main(String[] args) 
    { 

     FileInputStream fis = new FileInputStream("logging\\log4j.properties"); 

     if(fis != null) 
     { 
      PropertyConfigurator.configure(fis); 
     } 

     logger.info("process started."); 
    } 

UPDATE

而不是直接使用InputStream的,我修改了代碼,只需使用下面,它是現在的工作,訪問log4j.properties文件通過Runnable罐子。

PropertyConfigurator.configure(Converter.class.getResourceAsStream("/logging/log4j.properties")); 
logger.info("Conversion process started."); 

回答

1

我看到2個問題: 一)當您使用Eclipse創建一個罐子,默認情況下它只是拉鍊已編譯的類(所以.class文件)到你的目標.jar文件,你需要指定蝕你也想包括你的項目的資源,這些可以是像log4j的屬性文件那樣的配置文件,但也可以是i18n消息等的資源包。解釋如何做到這一點可以在這裏找到:Java & Eclipse: Resources in JAR? 。因此,如果log4j的屬性不在jar文件中,那麼請仔細檢查jar文件的創建過程! b)如果您的jar文件中有資源,則無法使用fileinputstream讀取它們:它們不存儲在獨立文件中,它們存儲在jar文件中。我假設你的jar文件是類路徑的一部分,所以當你已經實現將資源添加到你的jar文件中時,你需要將它們作爲資源處理:有關此主題的更多信息,請參見Load resource from anywhere in classpath

+0

謝謝,此評論和在其他領域的研究導致我使用getresourcestream的答案! – Tastybrownies

+0

更新我的問題! – Tastybrownies