2013-03-25 127 views
9

我在將應用程序部署到正在運行JRE 1.7的其他計算機時崩潰的應用程序遇到問題。當我在我的PC上運行NetBeans內部(甚至直接從JAR文件)時,一切都很好。但在另一臺計算機上,它在執行期間的特定事件(按鈕點擊)時失敗。Log4j - 無法找到日誌文件

所以,我瞭解了使用log4j庫進行日誌記錄的情況。這給了我一些關於我的應用程序中的問題的信息,並且記錄工作完美,再次在我的電腦上。但是,當我將JAR文件部署到僅運行JRE(Java 7 Update 17)的其他計算機時,我無法找到任何日誌文件的跟蹤。

這裏是我的log4j.properties文件:

# Root logger option 
log4j.rootLogger=INFO, file, stdout 

# Direct log messages to a log file log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.File=C:\logging.log 
log4j.appender.file.MaxFileSize=1MB 
log4j.appender.file.MaxBackupIndex=1 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} 
%-5p %c{1}:%L - %m%n 

# Direct log messages to stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Target=System.out 
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 

在我的電腦,我可以看到logging.log文件直接在項目文件夾中。就此而言,一切都很完美。但是,在用戶PC上,根本沒有該文件的標誌。不在C:\(我認爲它會),而不是在C:\ Program Files文件(x86)\或任何其他地方。我已經完成了我的硬盤的完整搜索,但沒有回來。

這個文件應該存儲在哪裏?我的屬性設置是否正確?非常困惑...

謝謝!

+3

目標機器上的用戶能否在c盤的根目錄下創建文件? – DwB 2013-03-25 18:08:09

+2

首先,屬性文件中的反斜槓需要加倍:'C:\\ logging.log'。或者使用正斜槓,因爲windows會接受它們:'C:\ logging.log' – Kenster 2013-03-25 18:11:21

+0

DwB - 是的,它們擁有c:\的全部權限。我不相信這是一個權限問題。 – Alex 2013-03-25 19:03:03

回答

6

如果有人在這篇文章中絆倒過,我想記錄我是如何解決它的。

首先,由於DwB正確指出,問題確實是用戶的帳戶沒有足夠的權限來創建logging.log文件。在我的代碼中,我有一個正在執行的catch塊,並且包含在發生文件寫入錯誤時退出系統的代碼。由於正是記錄的細節是我正在寫的內容,所以我無法得到任何輸出來將此線索作爲我的問題的來源。

一旦我意識到這一點,我只需要改變我在寫日誌文件的位置。而不是將它寫入根目錄(C:\)或jar文件所在的目錄(C:\ Program Files \),而這兩個目錄都是我無法保證用戶擁有完整權限的地方,我決定在其AppData路徑中創建一個文件夾。

我在程序的第一行現在是這個函數的調用(使用通用名稱MyProgram):

private static void makeAppDataFolder() { 
    File dir = new File(System.getenv("APPDATA") + "\\MyProgram"); 
    if (!dir.exists()) {dir.mkdir();} 
} 

這將創建一個用戶的在\應用程序數據\漫遊帳戶名爲MyProgram文件夾中。由於此路徑是用戶帳戶路徑的一部分,因此我相信用戶將始終可以寫入,從而解決權限問題。如果有人知道,請告訴我。

然後,在我的log4j.properties文件,我改線

log4j.appender.file.File=logging.log 

log4j.appender.file.File=${user.home}/Application Data/MyProgram/logging.log 

此指導文件,我剛創建的文件夾。

一旦我做到了這一點,並添加了一些放置良好的日誌消息,我能夠找到我的其他問題,現在一切正常。

我希望這可以幫助別人。如果有人有任何建議,請發佈。