产生问题:egg突然宕了,df 一看,/home/{user}/logs 文件夹占用100% ,config.prod.js文件已经设置了挂载其他文件夹,

 config.logger = {
    dir: `/logging/${appInfo.name}`
  }

并且/logging/下最新的日志文件也是有记录的

 

解决方法

egg-script的源码中有一段为

Save log file to /XXX/XXX

 

我们查看egg-script的源码,在他的start命令中,找到Save log file,如下

下一步,找到这个logDir变量声明的地方,往前看就能找到,如下代码:

const HOME = homedir();
const logDir = path.join(HOME, 'logs');

 

那么这个homeDir()是什么呢?它是npm包node-homedir,它的方法体如下:

const os = require('os');

module.exports = () => {
  if (process.env.MOCK_HOME_DIR) return process.env.MOCK_HOME_DIR;
  if (os.userInfo && os.userInfo().homedir) {
    return os.userInfo().homedir;
  } else if (os.homedir) {
    return os.homedir();
  }
  return process.env.HOME;
};

 

意思就是如果MOCK_HOME_DIR环境变量没有设置, 那么egg就去找系统的用户目录,没有用户目录就/home 目录,再不行就是当前HOME环境变量,因此我们修改MOCK_HOME_DIR为自己额外挂载的文件系统就可以了

动手

修改当前用户环境变量

cd 
vim .base_profile

添加一行

export MOCK_HOME_DIR=/logging/logs/

wq保存后,source一下

source .base_profile

将配置文件中的logger属性去除(这个不去除的话egg会同时输出两个日志,影响性能)

然后重启egg,就可以看到

Save log file to /logging/logs/

 

说明修改成功

参考文档:https://segmentfault.com/a/1190000013654491

您或许感兴趣

[2018-07-01]Redis-Cluster集群的理解和搭建
[2018-06-24]nginx下laravel抽离public文件夹,与项目文件夹同级,并重建索引
[2018-08-27]五分钟使用EasyWechat
[2018-09-04]基于laravel队列+Redis的秒杀锁库存实现

发表评论

电子邮件地址不会被公开。