2016-04-02 6 views
0

Windowsでプログラムに問題があり、問題の原因を特定できるようにログを記録しました。私のプログラムのJavaFXをWindows上で起動するには、.jarファイルとしてビルドします。log4jはウィンドウにファイルを書きません

私はlog4j FileAppenderをプログラムコードで設定していますが、設定ファイル(.../MyProject/data/configuration.txt)はログフォルダを持つ場所です。 Mac OS X(Eclipseでデバッグ)では、すべて正常に動作しています。

Windows(.../MyProject/build/dist/MyProgram.jar)上でjarファイルを起動し、設定されたログフォルダを表示しても、ログファイルは作成されません。 (私は.../MyProject/build/dist/data/configuration.txtの下にあるよりもconfigファイルを見つけ出しました)ログディレクトリのパスに新しいサブフォルダを書き込むと、プログラムによって作成されますが、ファイルはありません!

マイコード:

String computername = ""; 
     try { 
      computername = InetAddress.getLocalHost().getHostName(); 
     } catch (UnknownHostException e) { 
      e.printStackTrace(); 
     } 
     int tid = (int)Thread.currentThread().getId(); 
     PatternLayout playout = new PatternLayout("%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ}; %p; %F:%L; " + computername + "; " + tid + "; [%t]; %m;%n"); 

     SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); 
     Date datenow = new Date(); 
     datenow.setTime(datenow.getTime()); 
     FcManagerMain.formatteddate = dt.format(datenow); 

     try 
     { 
      File config = new File ("data/configuration.txt"); 
      BufferedReader bufferedReader = new BufferedReader(new FileReader("data/configuration.txt")); 
      int count = 1; 
      String line = null; 
      while((line = bufferedReader.readLine()) != null) 
      { 
       if(count == 3) 
       { 
        FcManagerMain.logfolder = line; 
       } 
       count++; 
      } 

      if(isWindows()) 
      { 
       File p = new File(FcManagerMain.logfolder + FcManagerMain.version); 
       p.mkdirs(); 
       File pp = new File(FcManagerMain.logfolder + FcManagerMain.version + "\\" + FcManagerMain.formatteddate + ".log"); 
       pp.createNewFile(); 
       FileAppender fileAppender = new FileAppender(playout, pp.getAbsolutePath(), false); 
       loggerstatic.addAppender(fileAppender); 
       loggerstatic.setLevel(Level.ALL); 
      } 
      else 
      { 
       File p = new File(FcManagerMain.logfolder + FcManagerMain.version); 
       p.mkdirs(); 
       File pp = new File(FcManagerMain.logfolder + FcManagerMain.version + "/" + FcManagerMain.formatteddate + ".log"); 
       pp.createNewFile(); 
       FileAppender fileAppender = new FileAppender(playout, pp.getAbsolutePath(), false); 
       loggerstatic.addAppender(fileAppender); 
       loggerstatic.setLevel(Level.ALL); 
      } 
     } 
     catch(Exception ee) 
     { 
      System.out.println(getStackTrace(ee)); 
     } 

loggerstaticが静的ロガーインスタンス(FcManagerController.loggerstatic)であり、他のすべてのクラスがloggerstaticからそのロガーを取ります。私はそれが正しいとは思わない、どうすればいいか教えてください!

編集:私は既に、特定のフォルダに書き込む権限がないかどうかを確認するために、別のログの場所を試しました。

おかげで、 rapgru

答えて

0

は、私はむしろ、あなたは組み込みのコンフィギュレーションを使用する私をお勧めします。 e。 log4j.propertiesを変更してください。

ここdocumentation${log}の特に使用を読む:

# Set the name of the file 
log4j.appender.FILE.File=${log}/log.out 

あなたは、デフォルトでは、独自のシステム変数を宣言すると、アプリを起動すると、JVMパラメータを経由して、それを変更します。

# log directory (default, 'log' directory relative to the execution path) 
# you can override the default directory by setting the variable as VM option when you start the application 
# example: -DMYAPP_LOG_DIR=/tmp/logs 
MYAPP_LOG_DIR=./log 

... 
log4j.appender.debugfile.file=${MYAPP_LOG_DIR}/application.log 

その後アプリケーションを起動してログファイルを実行フォルダに入れたくない場合は、-Dオプションで別のパスを指定するだけです。

+0

ありがとうございます。私はlog4jをプロパティファイル – rapgru

関連する問題