我在Node中编写了一个脚本来处理一些基本的服务器操作。然后我使用node-windows软件包将此脚本作为服务运行。此脚本的一部分写入日志文件。通常通过命令行运行脚本时一切正常。但是当作为服务运行时,没有任何内容写入日志文件。最初我认为这可能是一个路径问题,但事实似乎并非如此。有没有其他人有这方面的经验,你对如何解决这个问题有任何建议吗?
答案 0 :(得分:1)
使用node-windows
时,写入日志文件的路径应该是绝对的而不是相对的。这是因为node-windows
将代码包装在守护程序中,然后从其位置运行代码,代码使用child-process.fork()
运行。因此,如果您的日志路径是相对的,您将遇到此问题。我建议在node-windows
安装脚本中创建NodeJS应用程序所在的目录。这样做的好处是您可以引用Environment变量来获取目录的绝对路径,然后在日志路径前添加从环境变量返回的值。见下面的代码示例。
'use strict';
const Service = require('node-windows').Service;
const path = require('path');
const svc = new Service({
name: 'Logger',
description: 'Log software',
script: path.join(process.cwd(), 'index.js'),
env: [
{
name: 'APP_DIR_PATH',
value: process.cwd()
}
]
});
svc.on('install', () => {
console.log(`${svc.name} installed`);
});
svc.on('alreadyinstalled', () => {
console.log(`{svc.name} already installed`);
});
svc.install();
const appDir = process.env.APP_DIR_PATH;
const path = require('path');
const logPath = path.join(appDir, '/logs/log.txt');
const fs = require('fs');
module.exports = function insertLog(entryText, callback) {
let entry = { timestamp: (new Date()), text: entryText };
fs.appendFile(logPath, JSON.stringify(entry), callback);
}