You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Winston时出现Permission denied错误的解决求助

解决Winston日志目录权限拒绝问题

问题重现

node:internal/fs/utils:344
throw err;
^

Error: EACCES: permission denied, mkdir '/var/log/api/general'
at Object.mkdirSync (node:fs:1336:3)

可行解决方案

  • 修正chown命令格式:你之前的命令缺少用户/组参数,正确写法是指定Node进程运行的用户和组(比如当前登录用户,或www-data/node用户):
    sudo chown -R $USER:$USER /var/log/api
    # 如果进程用node用户运行,替换为:
    # sudo chown -R node:node /var/log/api
    
  • 先创建父目录再赋权:如果/var/log/api目录本身不存在,Winston的mkdirSync可能无法递归创建(取决于配置),先手动创建完整路径:
    sudo mkdir -p /var/log/api/general
    sudo chown -R $USER:$USER /var/log/api
    
  • 确认Node进程运行用户:检查你的API是用哪个用户启动的(执行ps aux | grep node查看),确保该用户对/var/log/api目录有读写权限:
    # 假设进程用户是www-data
    sudo chown -R www-data:www-data /var/log/api
    
  • 改用项目内日志目录(开发环境推荐):如果不想折腾系统目录权限,直接把日志路径改成项目根目录下的logs文件夹,Winston会自动创建(当前用户默认有权限):
    const winston = require('winston');
    const logger = winston.createLogger({
      transports: [
        new winston.transports.File({ filename: './logs/general.log' })
      ]
    });
    
  • 排查SELinux限制(Linux系统):如果是CentOS/RHEL等开启SELinux的系统,可能阻止Node写入系统日志目录,临时关闭验证:
    sudo setenforce 0
    
    验证有效后,可添加永久规则允许Node访问该目录:
    sudo semanage fcontext -a -t httpd_log_t "/var/log/api(/.*)?"
    sudo restorecon -Rv /var/log/api
    

内容的提问来源于stack exchange,提问作者Tilanga Pramith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 10:50:16