余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

别让日志在 pm2 下又"丢了",看下怎么配置 log4js

xiyangw 2023-05-14 11:15 11 浏览 0 评论

前言

log4js 算是“出镜率”很高的日志记录工具了,如果你熟悉 java ,就会一第时间在 npm 中搜索到它。适用于大多数项目对日志需求(日志分级、按时间分割文件、按不同分类记录等…)。类似的还有 winston loglevel 等。

别让日志在 pm2 下又"丢了",看下怎么配置 log4js

但在使用 PM2 开启 多线程 模式时,结果却不符合预期,比如:日志不输出、日志记录数据也有缺失。

社区解决方案很详细,这里做个总结,同时讲下日志管理的相关事项。

先来看下 log4js 的基本配置

如下配置对日志会有如下功能:

  • 未指定 categories 会有默认 default 的日志显示 appenders 输出,default 的日志级别为 debugger 及以上。
  • appenders 分为:控制台 console 输出、访问日志输出、错误异常输出。
  • 其中访问日志会按照日期进行分割。

正常运行项目后,日志输出正常,一切符合预期。(基于单进程方式)

当遇到 PM2 时(cluster)

为充分利用 cpu ,给应用开启多核能力,最方便莫过于使用 pm2 模块。具体使用不做赘述,简单使用,官网的文档足够了:

https://pm2.keymetrics.io/docs/usage/pm2-doc-single-page/

但开启多 cluster 后,log4js 日志却没有输出,不然也不会有那么多人苦恼了。

配置修改

log4js 相关:

回到官网,看下有什么特殊配置,不过还得抱怨一下,log4js 的文档真的很“蛋疼”。

https://log4js-node.github.io/log4js-node/api.html#configuration-object

如上图,分别在 log4js 的配置里增加了:pm2、pm2InstanceVar 两个参数。

pm2 配置相关:

pm2 启动配置

修改配置说明

设置 instance_var 实例变量,在交给 pm2 运行后,会自动赋值给 process.env.NODE_APP_INSTANCE 。详细说明可以看下官网说明:

https://pm2.keymetrics.io/docs/usage/environment/#specific-environment-variables

先结合 pm2 的 instance_var 配置,看下 log4js 的 pm2InstanceVar ,这两者必须设置的值相同。因为有关 isPM2Master 的逻辑判断:

再来具体看下 log4js 相关代码:

根据新增参数,预先移除原有的事件监听方式,当 isPM2Master 判断为 pm2 为主进程时,pm2-intercom 作为新的消息收发“中转站”。

这就是为何配置了 log4js 的配置,但 没有安装 pm2-intercom ,就会发生日志不输出的情况。

当然如果你图方便,在出现一些“未知错误”,可以尝试在 log4js 添加如下配置:

disableClustering: true;

它会使上面所说的方式失效,每个线程将会单独向目标日志文件输出内容,表明似乎问题可以解决,但是在高频访问下会出现日志缺失的情况。毕竟日志文件被多个进程写入放操作着。

有效的日志管理

对于一个线上的项目,可能需要一些其他手段来对日志做维护管理。既然现在说 pm2 ,就要看下其日志插件:pm2-logrotate

来看下具体配置:

定时轮询

rotateIntervalworkerInterval 都有定时的作用。

前者通过编写 cron 表达式,约定每隔多少时间 强制 检查日志的状态。

后者 workerInterval 是约定固定秒数来查询日志状况。(默认 30 秒)

日志分割条件

max_sizeretain 分别来约束日志的大小,和文件个数

每次 定时轮询 触发后,会对文件大小,数量进行检查。超过约定的值,则会重新创建新文件。

实际运用

假设单日日志产出为 10G ,按照 rotateInterval 每天零点进行切割日志,虽然有章法,但如果要从 10G 大小的日志文件中排查问题,这似乎有些困难。

我们可以设置 max_size 为 100M ,这样 10G 总大小的文件,将在一天中被切成 100 个。

甚至如果每天的访问量有迹可循,比如上午 9-12 点会出现高峰,其他时间相对低频。可以进一步优化 workerInterval 和 rotateInterval cron 表达式:

这样在高访问时间段,可以跟有效的分割日志。(美中不足的是如果符合日志分割条件,00:00 和 00:30 时,会出现两份日志,强迫症表示不太适应)

关于我

一名工作在一线的前端工程师,乐于实践,并分享前端开发经验。

关注头条号 or 微信公众号【前端雨爸】,欢迎评论留言,愿与各位交流进步。

点击 ↙ 了解更多,了解更多前端开发技术文章。

相关推荐

辞旧迎新,新手使用Containerd时的几点须知

相信大家在2020年岁末都被Kubernetes即将抛弃Docker的消息刷屏了。事实上作为接替Docker运行时的Containerd在早在Kubernetes1.7时就能直接与Kubelet集成使...

分布式日志系统ELK+skywalking分布式链路完整搭建流程

开头在分布式系统中,日志跟踪是一件很令程序员头疼的问题,在遇到生产问题时,如果是多节点需要打开多节点服务器去跟踪问题,如果下游也是多节点且调用多个服务,那就更麻烦,再者,如果没有分布式链路,在生产日志...

Linux用户和用户组管理

1、用户账户概述-AAA介绍AAA指的是Authentication、Authorization、Accounting,即认证、授权和审计。?认证:验证用户是否可以获得权限,是3A的第一步,即验证身份...

linux查看最后N条日志

其实很简单,只需要用到tail这个命令tail-100catalina.out输入以上命令,就能列出catalina.out的最后100行。...

解决linux系统日志时间错误的问题

今天发现一台虚拟机下的系统日志:/var/log/messages,文件时间戳不对,跟正常时间差了12个小时。按网上说的执行了servicersyslogrestart重启syslog服务,还是不...

全程软件测试(六十二):软件测试工作如何运用Linux—读书笔记

从事过软件测试的小伙们就会明白会使用Linux是多么重要的一件事,工作时需要用到,面试时会被问到,简历中需要写到。对于软件测试人员来说,不需要你多么熟练使用Linux所有命令,也不需要你对Linux...

Linux运维之为Nginx添加错误日志(error_log)配置

Nginx错误日志信息介绍配置记录Nginx的错误信息是调试Nginx服务的重要手段,属于核心功能模块(nginx_core_module)的参数,该参数名字为error_log,可以放在不同的虚机主...

Linux使用swatchdog实时监控日志文件的变化

1.前言本教程主要讲解在Linux系统中如何使用swatchdog实时监控日志文件的变化。swatchdog(SimpleWATCHDOG)是一个简单的Perl脚本,用于监视类Unix系统(比如...

syslog服务详解

背景:需求来自于一个客户想将服务器的日志转发到自己的日志服务器上,所以希望我们能提供这个转发的功能,同时还要满足syslog协议。1什么是syslog服务1.1syslog标准协议如下图这里的fa...

linux日志文件的管理、备份及日志服务器的搭建

日志文件存放目录:/var/log[root@xinglog]#cd/var/log[root@xinglog]#lsmessages:系统日志secure:登录日志———————————...

运维之日志管理简介

日志简介在运维过程中,日志是必不可少的东西,通过日志可以快速发现问题所在。日志分类日志分类,对不同的日志进行不同维度的分析。操作系统日志操作系统是基础,应用都是在其之上;操作系统日志的分析,可以反馈出...

Apache Log4j 爆核弹级漏洞,Spring Boot 默认日志框架就能完美躲过

这两天沸沸扬扬的Log4j2漏洞门事件炒得热火朝天:突发!ApacheLog4j2报核弹级漏洞。。赶紧修复!!|Java技术栈|Java|SpringBoot|Spring...

Linux服务器存在大量log日志,如何快速定位错误?

来源:blog.csdn.net/nan1996jiang/articlep/details/109550303针对大量log日志快速定位错误地方tail/head简单命令使用:附加针对大量log日志...

Linux中查看日志文件的正确姿势,求你别tail走天下了!

作为一个后端开发工程师,在Linux中查看查看文件内容是基本操作了。尤其是通常要分析日志文件排查问题,那么我们应该如何正确打开日志文件呢?对于我这种小菜鸡来说,第一反应就是cat,tail,vi(或...

分享几款常用的付费日志系统,献给迷茫的你!

概述在前一篇文章中,我们分享了几款免费的日志服务器。他们各有各的特点,但是大家有不同的需求,有时免费的服务器不能满足大家的需要,下面推荐几款付费的日志服务器。1.Nagios日志服务器Nagio...

取消回复欢迎 发表评论: