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
ありがとうございます。私はlog4jをプロパティファイル – rapgru