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

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

时间: 2024-12-25 04:18:46

Nodejs线上日志部署的相关文章

Node.js线上服务器部署与发布

第1章 课程预热对整个部署思路进行全流程介绍,通过 5 个不同类型项目,来演示从本地的仓库到最终线上稳定运行的整个项目部署发布流程,来帮助始终编程在一线的前端或者后端工程师,甚至是有 Coding 能力的产品经理,从操作流程和架构形态上,掌握从零开始的项目上线环节,掌握这关键一步,跨过去前端到后端,本地到线上,开发到生产...1-1 为什么是全栈最后一公里1-2 搭建线上生产环境需要做什么 第2章 待部署的 5 个本地 Nodejs 项目分别介绍五个技术架构和产品形态的项目背景,一个 Nodej

Netty简单应用与线上服务器部署_netty视频

Netty简单应用与线上服务器部署 课程学习地址:http://www.xuetuwuyou.com/course/198 课程出自学途无忧网:http://www.xuetuwuyou.com 一.开发环境 4.1.11.Final   jdk1.8 maven 3.2 Spring 4.3.9 二.适合人群 ①想深入学习java ClassLoader ②想在线上linux服务器上运行netty或Springboot服务 三.课程目标 ①掌控ClassLoader ②学会编写shell脚本

rsync实现负载均衡集群文件同步,搭建线上测试部署环境

闲来无事,搭建一个负载均衡集群,至于负载均衡集群搭建过程,找时间写下.这次主要写集群之间的文件同步,以及线上测试环境的搭建. 笔者看过很多公司都没有线上测试环境,真是崩溃了,不造怎么确保线上线下环境一致的. 笔者此次使用三台服务器: 192.168.138.3   web服务器 192.168.138.4   web服务器 192.168.138.10  web服务器+线上测试环境+源站 其中3 4 服务器作为集群中的web服务器,对外开放,是负载均衡集群的部分. 其中10 服务器不对外开放,代

Docker + node(koa) + nginx + mysql 线上环境部署

在上一篇 Docker + node(koa) + nginx + mysql 开发环境搭建,我们进行了本地开发环境搭建 现在我们就来开始线上环境部署 如果本地环境搭建没有什么问题,那么线上部署的配置也就很简单了 我所使用的环境,Linux Mint,命令有不同可以适当更改 目录结构 - compose 新建,线上环境配置 - data - conf - node_modules - static - docker-compose.yml - docker-compose-prod.yml 新建

(转) 线上环境部署MongoDB的官方建议

本文主要内容来自MongoDB官方文档http://docs.mongodb.org/manual/administration/production-notes/.并结合了实际工作情况进行分享. 1)软件包的选择 确保使用最新的稳定版本.目前我们线上使用的版本是2.4.6.MongoDB软件包下载页面http://www.mongodb.org/downloads. 确保线上环境总是使用64位版本.32位版本只能用于测试和开发使用,因为32位版本最大只能存储2GB的数据.启动MongoDB的时

Node.js项目的线上服务器部署与发布

课程目录:第1章 课程预热对整个部署思路进行全流程介绍,通过 5 个不同类型项目,来演示从本地的仓库到最终线上稳定运行的整个项目部署发布流程,来帮助始终编程在一线的前端或者后端工程师,甚至是有 Coding 能力的产品经理,从操作流程和架构形态上,掌握从零开始的项目上线环节,掌握这关键一步,跨过去前端到后端,本地到线上,开发到生产...第2章 待部署的 5 个本地 Nodejs 项目分别介绍五个技术架构和产品形态的项目背景,一个 Nodejs 静态网站,普通的带数据库电影网站,手机 App 场景

Node.js项目线上服务器部署与发布

第1章 课程预热   1-1 为什么是全栈最后一公里   1-2 搭建线上生产环境需要做什么第2章 待部署的 5 个本地 Nodejs 项目   2-1 快速本地搭建一个纯静态简易站点   2-2 Nodejs 电影网站项目上线准备   2-3 狗狗说 React Native 开发的 App 后台项目分析   2-4 微信小程序的项目介绍   2-5 电影微信公众号的项目概况   2-6 从一个故事理解整个部署思路第3章 选购域名服务器及备案   3-1 选购域名的经验分享   3-2 主机厂

简要的线上环境部署概览

谈到线上环境,一般开发同学,不太容易接触到.即使接触到,也只是其中的冰山一角! 所以,其实说起线上环境的部署,咱们好像都有点懂,但是又都不一定完全懂!网上的知识无穷无尽,但往往都是各司一职,对于普通同学,很难窥其全貌! 所以,我今天就来说说,一些普通的线上环境的部署步骤,和一些脚本小技巧吧.只希望通过这篇文章,能够让大家有一个运维的全局! 我将会分几条线来整理咱们的运维思路! 一.从理论上讲,我们应该怎么做? 1. 针对的是什么样的用户群体,体量大量会有多少? 这是一个部署规划的前题.为啥呢?

线上日志分析与其他一些脚本

对一些线上常用的脚本进行了一下总结和说明,免得以后忘记了~ 一·线上发布API集群的代码脚本: #!/bin/bash #Author CCC host=' 10.44.22.113 10.44.22.113 10.44.22.112 10.44.22.112 10.44.22.113 10.44.22.113 10.44.22.114 10.44.22.114 10.44.22.115 10.44.22.115 10.44.22.119 10.44.22.119 ' #basePath='/v