首页 > 代码库 > 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:
- console 往控制台输出
- file 文件日志 maxLogSize 表示当文件超过这个值时切换文件 backup:n 会循环使用 error[1,n].log 的文件名
- dateFile 使用这个就会按天切割日志,按天生成文件名 access.log-2014-12-14
问题:
日志文件名和内容会相差一天 access.log-2014-12-14 的文件里其实记录的是 2014-12-15 的日志文件,这个暂时还没有找到解决办法
换了log4j之后会自动切割日志,按天进行保存,内存就一直没暴增了。
内存不满就没报警,没了报警整个世界都清净了。
Nodejs线上日志部署
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。