Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js winston记录器文件权限异常_Node.js_Logging_Winston - Fatal编程技术网

Node.js winston记录器文件权限异常

Node.js winston记录器文件权限异常,node.js,logging,winston,Node.js,Logging,Winston,我使用node.js编写了一个API,其中使用了Winston logger。因为我提到的写我所有日志的文件的所有者是ROOT,所以我的应用程序退出了。当我将文件所有者更改为我的用户时,我的应用程序工作。所以我的结论是,文件权限是个问题 我的温斯顿密码: new(winston.transports.File)({ filename: config.path,-------------------->/home/username/logsdir/logfile

我使用node.js编写了一个API,其中使用了Winston logger。因为我提到的写我所有日志的文件的所有者是ROOT,所以我的应用程序退出了。当我将文件所有者更改为我的用户时,我的应用程序工作。所以我的结论是,文件权限是个问题

我的温斯顿密码:

new(winston.transports.File)({
        filename: config.path,-------------------->/home/username/logsdir/logfile
        //maxsize: 1024 * 1024 * 10, // 10MB
        exitOnError: false,
        maxsize: 1024 * 1024,
        level: 'info',
        handleExceptions: true,
        levels: customLevels.levels,
        rotationFormat: function() {
            return getFormattedDate();
            function getFormattedDate() {
                var temp = new Date();
                return dateStr = padStr(temp.getFullYear()) + padStr(1 + temp.getMonth()) + padStr(temp.getDate()) + padStr(temp.getHours()) + padStr(temp.getMinutes()) + padStr(temp.getSeconds());
            }
            function padStr(i) {
                return (i < 10) ? "0" + i : "" + i;
            }
        }
    })]

Winston没有抛出任何异常,只是我的应用程序退出了。是否可以检查文件的所有者,或者winston有任何选择来解决这个问题。我在谷歌上搜索了很多,但我找不到解决办法。帮我解决这个问题。提前感谢。

温斯顿似乎没有为这种情况提供任何帮助。解决方案是自己检查文件是否可写。有一种方法可以做到这一点:

var logFile;
[
    '/var/log/my-app.log',
    path.join(process.cwd(), 'my-app.log'),
    path.join('/tmp', 'my-app.log'),
]
.forEach(function (path) {
    if (logFile) { return; }
    if (fs.accessSync && fs.accessSync(path, fs.W_OK)) {
        console.log('logging to ' + path);
        logFile = path;
        return;
    }

    var fh;
    try { fh = fs.openSync(path, 'a'); }
    catch (e) {
        console.error(e.message);
        return;
    }
    console.log('logging to ' + path);
    logFile = path;
    fs.closeSync(fh);
});
现在,如果一个文件是可写的,那么变量logFile将具有可写文件的名称