我的Windows程序出现问题,我包含了日志记录,因此我可以找到问题的具体原因。我的程序的JavaFX并在Windows上启动它我将它构建为.jar文件。
我通过程序代码设置log4j FileAppender,在config-file(... / MyProject / data / configuration.txt)中是获取日志文件夹的路径。在Mac OS X上(使用Eclipse调试)一切正常。
如果我在Windows上启动jar(... / 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
答案 0 :(得分:0)
我宁愿建议您使用内置配置,i。即适应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
选项指定其他路径。