NodeJS 后端开发 08 使用log4js打日志

网友投稿 753 2022-05-29

NodeJS 后端开发 08 使用log4js打日志

日志是什么?

像记日记一样,日志是通过程序打印出来的,记录程序内部何时何处发生了什么事件。

本文只为使用学习为主,想对日志管理和分析有更深认识的可以看 => 日志原理与开发分析这篇完全指南就够了!适应各种规模

我们也用过console.log来打印一些调试信息,有什么区别呢?请读者带着这个问题往下读。

NodeJS 后端开发 08 使用log4js打日志

先安装

我们这里先安装一个日志的模快。

打开终端执行下面命令:

npm install log4js

基本使用

const log4js = require('log4js') var logger = log4js.getLogger('雷学委开发日常') logger.level = 'info' logger.info('早上起床') logger.info('拥抱太阳') logger.info('吃完早餐') logger.info('充满希望') logger.info('开始了代码的一天')

保存上面代码为demo-fun.js ,然后运行:

node demo-fun.js

可以得到跟上面日志图片的效果,读完可以试试。

效果如下:

项目配置使用日志

log4js 可以基于代码配置日志规则,但是我们推荐使用json来配置。这是一个好习惯,虽然修改代码和配置都需要重启应用,但是可以通过程序实现让代码不重启也加载日志,这一点本文不作深入展示,后续补上。

代码配置日志

读者可以保存为demo2.js, 自行运行。

//demo2.js const log4js = require("log4js"); //这里配置log4js使用fileAppender来输出“error”级别的日志。 //然后fileAppender是一个文件类型的日志累加器,输出日志到文件demo2.log log4js.configure({ appenders: { fileAppender: { type: "file", filename: "demo2.log" } }, categories: { default: { appenders: ["fileAppender"], level: "error" } } }); const logger = log4js.getLogger("demo"); //下面调用logger对象来打印一些日志。 logger.info("普通日志输出在这里!!!"); logger.error("雷学委,程序发现错误了,报警信息!"); logger.fatal("雷学委,这里通常是服务端/引擎吃不消了,打印严重错误日志。");

使用JSON配置log4js

把下面的内容保存为log4js.json

定义了两个appender:fileAppender, stdout,分别写日志到文件和标准输出流。

然后设置了default(默认)加载的appenders列表。

{ "appenders": { "fileAppender": { "type": "file", "filename": "leiXueWei.log" }, "stdout": { "type": "stdout", "layout": { "type": "pattern", "pattern": "%d [%p] [%c] - %m%n" }} }, "categories": { "default": { "appenders": ["fileAppender","stdout"], "level": "info" } } }

雷学委的 simpleweb.js 代码

const log4js = require("log4js"); const logCfg = require("./log4js.json") console.log('logCfg:',logCfg) log4js.configure(logCfg) const logger = log4js.getLogger('雷学委Logger') const pid = require('process').pid logger.info("process id:",pid) const server = require('http').createServer((req,res)=>{ console.log(new Date() + ' - visiting app:', req.url) logger.log('visiting app:', req.url) res.write("Levin - Log4js DEMO - ProcessId: "+pid) res.end() }) server.listen(8000,()=>{console.log('listening at 8000, pid:',pid)})

使用log4js打印日志效果图

当前项目路径中,可以找到下面日志文件leixuewei.log,我们查看发现console.log的信息都没有被记录。

log4js的logger 跟console.log的区别

console.log

通常是我们用来输出程序中间状态/事件等信息,也能像打印日志一样把日期其他数据都配套上,但是它更加轻便,而且不能写到文件中,打印方式也比较单一。

log4js提供logger给我们使用,这样我们可以log4js.getLogger(不同logger的名字),来区别的打印程序中间状态/事件等信息。

关键是能够写到文件中,这样方便我们以后回溯程序状态。

log数据很有用,必须让程序打印准确的信息

比如程序运营一个月后某段时间发现程序渲染页面特别慢。有了文件日志,我们可以轻松的进行统计分析,发现程序一些懒惰的bug,那些随着时间才能被发现的bug。

特别是一些多人协作的项目,一个开发可能不知道其他开发代码的逻辑,经过多次包装后,有可能出现一些诡异的循环,或者特定条件才执行的代码(比如根据节假日来展示活动的代码)。

很多问题在程序不被运行时,很难被发现,所以通过日志,可以记录并跟踪发现潜在问题,当然前提是,开发者得往程序中输出日志。

另外一个,就是不能盲目输出过多日志,访问主页,你打印1G的log数据,不光是占有硬盘还容易导致主页加载不出来。说的稍微夸张,但是品一品。

生产环境可用的log4js配置

好,刚好端午,附送一个适合生存环境使用的log4js.prod.json配置。 它定义了每天日志回滚,并保持30天的log数据,基本符合生产使用。

{ "appenders": { "fileAppender": { "type": "dateFile", "daysToKeep": 30, "pattern": ".yyyyMMdd", "filename": "leixuewei.log", "layout": { "type": "pattern", "pattern": "%d [%p] [%c] - %m%n" } } }, "categories": { "default": { "appenders": ["fileAppender"], "level": "info" } } }

下面是pattern为“.yyyyMMddhhmm’ 是的日志滚动效果,读者自行下载代码修改尝试吧。

总结

博主给个小建议

一定要打log,除非这个应用只有你维护不然出故障就是坑人。

可能我们写了100行代码可以打印个2到3行,如果是一些特别复杂的业务可以多打点。

同时使用不同级别的日志来打印。

这不是硬性标准,关键是反复使用中学会高效的使用日志系统。

持续学习持续开发,我是雷学委

参考链接

雷学委本文展示的项目代码

日志原理与开发分析这篇完全指南就够了!适应各种规模!

log4js 更多示例

log4js文档

javaScript

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:使用Notebook保存的镜像启动训练任务
下一篇:Python缓存lru_cache的介绍和讲解
相关文章