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之后會自動切割日志,按天進行保存,內存就一直沒暴增了。

內存不滿就沒報警,沒了報警整個世界都清凈了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM