diff --git a/src/apps.js b/src/apps.js index 98a965d55..1c3e8fac7 100644 --- a/src/apps.js +++ b/src/apps.js @@ -574,7 +574,8 @@ function mailboxNameForLocation(location, manifest) { } function startAppTask(appId, callback) { - let task = tasks.startTask(tasks.TASK_APP, [ appId ]); + const logFile = path.join(paths.LOG_DIR, appId, 'apptask.log'); + let task = tasks.startTask(tasks.TASK_APP, [ appId ], { logFile }); task.on('start', function (taskId) { appdb.update(appId, { taskId: taskId }, function (error) { if (error) return callback(new AppsError(AppsError.INTERNAL_ERROR, error)); diff --git a/src/tasks.js b/src/tasks.js index ae379b623..b9d891dbf 100644 --- a/src/tasks.js +++ b/src/tasks.js @@ -98,16 +98,19 @@ function update(id, task, callback) { }); } -function startTask(type, args) { +function startTask(type, args, options) { assert.strictEqual(typeof type, 'string'); assert(Array.isArray(args)); + assert(!options || typeof options === 'object'); let events = new EventEmitter(); + options = options || {}; + taskdb.add({ type: type, percent: 0, message: 'Starting', args: args }, function (error, taskId) { if (error) return events.emit('error', new TaskError(TaskError.INTERNAL_ERROR, error)); - const logFile = `${paths.TASKS_LOG_DIR}/${taskId}.log`; + const logFile = options.logFile || `${paths.TASKS_LOG_DIR}/${taskId}.log`; let fd = safe.fs.openSync(logFile, 'w'); // will autoclose if (!fd) { debug(`startTask: unable to get log filedescriptor ${safe.error.message}`);