首页 > 代码库 > Nodejs线上日志部署

Nodejs线上日志部署

Nodejs 被越来越多的使用到线上系统中,但线上系统没有日志怎么行呢。

一、forever记录日志

我的线上系统使用forever来启动服务,最开始就直接使用了forever来记录

forever start -a -l ./logs/forever.log

  -a 表示追加日志文件
      -l 指定日志文件
  -s 忽略console.log输出的日志记录(使用log4j时要用这个)

最开始还挺好的,所有日志都能记录下来,但是既然是线上环境,日志比较多,跑着跑着就出问题了。

forever.log文件变得越来越大,在我的系统里直接占了3GB的内存,而且全在内存里面,然后服务器就报警了。

然后尝试对forever.log文件进行切割,结果这SB玩意更本没法切割,具体问题:

1.对forever.log 重命名 forever.log.bak 然后新建forever.log,结果日志仍然往forever.log.bak里写,内存一点也没减少

2.直接删除forever.log ,forever不会新建forever.log,占用的内存也一直不释放

似乎是forever一直使用着文件句柄根本不释放就往里面写,根本没法做日志切割。

 

二、log4j记录日志

log4j是nodejs的一个log日志包,具体使用方法就不说了,只说怎么配置和分割日志

 1 { 2     "appenders": [ 3         { "type" : "console" }, 4         { 5             "type": "dateFile", 6             "filename": "logs/access.log", 7             "pattern": "-yyyy-MM-dd", 8             "category" : "normal", 9             "level" : "LOG"10         },11         {12             "type": "file",13             "filename": "logs/error.log",14             "maxLogSize": 2097152,15             "backup": 10,16             "category": "error"17         },18         {19             "type": "dateFile",20             "filename": "logs/record.log",21             "pattern": "-yyyy-MM-dd",22             "category": "record"23         }24     ],25     "replaceConsole" : true,26     "levels": {27         "error":  "error",28         "record" : "trace"39     }30 }

 

log4j的type:

  1. console 往控制台输出
  2. file 文件日志 maxLogSize 表示当文件超过这个值时切换文件 backup:n 会循环使用 error[1,n].log 的文件名
  3. dateFile 使用这个就会按天切割日志,按天生成文件名 access.log-2014-12-14

问题:

  日志文件名和内容会相差一天 access.log-2014-12-14 的文件里其实记录的是 2014-12-15 的日志文件,这个暂时还没有找到解决办法

 

换了log4j之后会自动切割日志,按天进行保存,内存就一直没暴增了。

内存不满就没报警,没了报警整个世界都清净了。

Nodejs线上日志部署