У меня проблемы с моей программой в Windows, я включил ведение журнала, чтобы найти конкретную причину проблемы. Моя программа JavaFX, и чтобы запустить ее в Windows, я создаю ее как файл .jar.
Я настраиваю log4j FileAppender через программный код, в конфигурационном файле (.../MyProject/data/configuration.txt) указан путь, по которому находится папка журнала. В Mac OS X (отлаженной с помощью Eclipse) все работает нормально.
Если я запускаю банку в Windows (.../MyProject/build/dist/MyProgram.jar) и вижу настроенную папку журнала, я не вижу созданного файла журнала. (Я понял, что файл конфигурации должен находиться в .../MyProject/build/dist/data/configuration.txt) Если я пишу новые подпапки в путь к каталогу журнала, программа создает их, но файла нет!
Мой код:
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 — это статический экземпляр Logger (FcManagerController.loggerstatic), и каждый другой класс берет свой регистратор из loggerstatic. Я думаю, что это неправильно, пожалуйста, скажите мне, как это сделать!
РЕДАКТИРОВАТЬ: я уже пробовал разные места для журналов, чтобы узнать, нет ли у меня разрешения на запись в эти конкретные папки.
Спасибо, rapgru