我有一个SilentUpdater(使用Install4j版本6.1.4构建),它将日志文件写入我通过VM参数配置的某个目录:checkDefaultOverlap: function(default_shifts, done) {
async.each(default_shifts, function(default_shift, next) {
var subarray = default_shifts.slice(default_shifts.indexOf(default_shift) + 1, default_shifts.length - 1);
async.each(subarray, function(default_shift2, next) {
default_shift.week_days.map(function(day1) {
default_shift2.week_days.map(function(day2) {
if (day1 === day2 &&
default_shift.start <= default_shift2.end && default_shift2.start <= default_shift.end)
next({error: 'The shifts overlap!'});
});
});
next();
}, function(err) {
if (err) next(err);
else next(null);
});
}, function(err) {
if (err) return done(err);
else return done(null);
});
}
}
。
但是此过程始终会覆盖先前的更新程序日志。所以我在考虑用执行时间戳写日志文件。我尝试过使用-Dinstall4j.debug=true -Dinstall4j.keepLog=true -Dinstall4j.alternativeLogfile=${installer:sys.installationDir}/log/updater.log
和sys.date
变量,如下所示:
sys.time
但即使更新程序在不同时间执行,我仍然拥有相同的文件。在阅读有关这两个变量的文档后,我认为它们是在安装程序构建过程中定义的,并且始终是相同的。
那么,有没有其他方法可以通过VM参数或在执行更新过程期间获得具有当前时间戳的日志文件?
答案 0 :(得分:0)
从install4j 6.1.4开始,没有解决此问题的方法。我已将此添加到问题跟踪器中。
更新2019-02-05
在install4j 8中,您将能够在#include <iostream>
#include <iomanip>
using namespace std;
// ...
long double d = 0.000098765;
// ...
stringstream ss2;
ss2 << setprecision(10) << fixed << d;
cout << ss2.str() << endl;
或其新别名-Dinstall4j.alternativeLogfile
中使用安装程序变量。将不再需要传递-Dinstall4j.log
。
对于时间戳,install4j 8包含安装程序变量-Dinstall4j.keepLog=true
,${installer:sys.date}
和${installer:sys.time}
,其中包含安装程序启动的时间。