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之后会自动切割日志,按天进行保存,内存就一直没暴增了。

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

 posted on 2014-12-16 00:07  feng_013  阅读(8881)  评论(0编辑  收藏  举报