node.js学习笔记(23) log4js

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 在前面的笔记里讲过express-genrator创建的express项目使用morgan日志,将morgan作为应用级中间件,express项目就会自动记录http访问日志。

在前面的笔记里讲过express-genrator创建的express项目使用morgan日志,将morgan作为应用级中间件,express项目就会自动记录http访问日志。

Morgan默认了5中日志的格式,也可以让用户自定义日志格式,是一个简单使用的日志中间件。

但是,我用java编程多年,非常清楚log4j的强大与好用。因此,仅仅log4js这个名字就已经让我先入为主了,尽管morgan也是一个不错的日志中间件。

Log4js相比morgan,更加强大,更加贴近java程序员的习惯。



Section 1


让我们从一个简单是例子来开始log4js的体验:

mkdir log4js-examples
cd log4js-examples
npm init
npm install log4js

创建一个log4js-minimal.js文件:

var log4js = require('log4js');
var logger = log4js.getLogger();
logger.debug("Some debug messages");


运行效果:

lee@mypc ~/works/nodejs/study23/log4js-examples $ node log4js-minimal.js 
[2016-01-19 19:07:08.258] [DEBUG] [default] - Some debug messages

这就是一个最最简单的log4js实例:启动,debug信息输出到控制台,over。



Section 2


再来一个输出到文件,log4js-file.js:


var log4js = require('log4js');
//console log is loaded by default, so you won't normally need to do this
//log4js.loadAppender('console');
log4js.loadAppender('file');
//log4js.addAppender(log4js.appenders.console());
log4js.addAppender(log4js.appenders.file('logs/cheese.log'), 'cheese');

var logger = log4js.getLogger('cheese');
logger.setLevel('ERROR');

logger.trace('Entering cheese testing');
logger.debug('Got cheese.');
logger.info('Cheese is Gouda.');
logger.warn('Cheese is quite smelly.');
logger.error('Cheese is too ripe!');
logger.fatal('Cheese was breeding ground for listeria.');
 

运行:

lee@mypc ~/works/nodejs/study23/log4js-examples $ node log4js-file.js 
[2016-01-19 19:11:16.447] [ERROR] cheese - Cheese is too ripe!
[2016-01-19 19:11:16.452] [FATAL] cheese - Cheese was breeding ground for listeria.
lee@mypc ~/works/nodejs/study23/log4js-examples $ ls logs
cheese.log
lee@mypc ~/works/nodejs/study23/log4js-examples $ cat logs/cheese.log 
[2016-01-19 14:02:40.929] [ERROR] cheese - Cheese is too ripe!
[2016-01-19 14:02:40.933] [FATAL] cheese - Cheese was breeding ground for listeria.

运行完,我们可以看到日志输出到文件logs/cheese.log



Section 3


log4js-file.js也可以这样配置,效果是一样的。

log4js-configure.js:

var log4js = require('log4js');
log4js.configure({
    appenders: [
        { type: 'console' },
        { type: 'file', filename: 'logs/cheese-configure.log', category: 'cheese' }
    ]
});

var logger = log4js.getLogger('cheese');
logger.setLevel('ERROR');

logger.trace('Entering cheese testing');
logger.debug('Got cheese.');
logger.info('Cheese is Gouda.');
logger.warn('Cheese is quite smelly.');
logger.error('Cheese is too ripe!');
logger.fatal('Cheese was breeding ground for listeria.');



Section 4


我们在javaEE中使用log4j的时候,总是习惯配置log4j.properties,有没有?!

Log4js也可以从配置文件来读取配置。

configfile.json:

{
  "appenders": [
    { "type": "console" },
    { "type": "file", "filename": "logs/cheese-configfile.log", "category": "cheese" }
  ]
}

log4js-configfile.js:

var log4js = require('log4js');
log4js.configure('configfile.json');

var logger = log4js.getLogger('cheese');
logger.setLevel('ERROR');

logger.trace('Entering cheese testing');
logger.debug('Got cheese.');
logger.info('Cheese is Gouda.');
logger.warn('Cheese is quite smelly.');
logger.error('Cheese is too ripe!');
logger.fatal('Cheese was breeding ground for listeria.');



Section 5


log4js完全想morgan一样当express的中间件用。

来试一下

创建一个项目log-log4js:


express log-log4js
cd log-log4js
#install node-modules
npm install
#install log4js
npm install log4js
#create a directory for save log files
mkdir logs

可以这样修改app.js:


...
//var logger = require('morgan');
var log4js = require('log4js');
...
//app.use(logger('dev'));
log4js.configure({
  appenders: [
    { type: 'console' }, //控制台输出
    {
      type: 'file', //文件输出
      filename: 'logs/access.log',
      maxLogSize: 1024,
      backups:3,
      category: 'normal'
    }
  ]
});
var logger = log4js.getLogger('normal');
logger.setLevel(log4js.levels.INFO);
app.use(log4js.connectLogger(logger, {level:log4js.levels.INFO}));
...


运行并测试log-log4js:

npm start

curl http://localhost:3000/
curl http://localhost:3000/users

这时,可以看到logs有一个日志文件access.log

lee@mypc ~/works/nodejs/study23/log-log4js $ ls logs
access.log
lee@mypc ~/works/nodejs/study23/log-log4js $ cat logs/access.log 
[2016-01-22 20:40:54.977] [INFO] normal - ::ffff:127.0.0.1 - - "GET / HTTP/1.1" 200 170 "" "curl/7.35.0"
[2016-01-22 20:41:03.245] [INFO] normal - ::ffff:127.0.0.1 - - "GET /users HTTP/1.1" 200 23 "" "curl/7.35.0"
[2016-01-22 20:41:05.817] [INFO] normal - ::ffff:127.0.0.1 - - "GET / HTTP/1.1" 200 170 "" "curl/7.35.0"
[2016-01-22 20:41:07.422] [INFO] normal - ::ffff:127.0.0.1 - - "GET /users HTTP/1.1" 200 23 "" "curl/7.35.0"




Section 6


看到这儿,有没有发现section2中的代码输出了很多日志信息,而在日志文件中却只有两行。

Log4js一定有比morgan更强大的地方,否则它就不配叫log4js。


Log4js的输出级别有6个,从低到高分别是 trace, debug, info, warn, error, fatal。

在section2的实例中,设置了log的输出级别是error,所以低于error级别的trace,debug,info和warn都没有输出。

设置输出级别的好处尤其体现在测试环境和生产环境,测试环境中跟踪测试,往往需要非常详细的debug信息,而在生产环境中运行稳定版本则不需要过多的日志信息,只需要必要的warn,error或fetal。


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
23天前
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
43 1
|
11天前
|
存储 JavaScript NoSQL
Node.js新作《循序渐进Node.js企业级开发实践》简介
《循序渐进Node.js企业级开发实践》由清华大学出版社出版,基于Node.js 22.3.0编写,包含26个实战案例和43个上机练习,旨在帮助读者从基础到进阶全面掌握Node.js技术,适用于初学者、进阶开发者及全栈工程师。
36 9
|
1月前
|
JSON 监控 JavaScript
Node.js-API 限流与日志优化
Node.js-API 限流与日志优化
|
1月前
|
JavaScript 前端开发 中间件
JS服务端技术—Node.js知识点
本文介绍了Node.js中的几个重要模块,包括NPM、Buffer、fs模块、path模块、express模块、http模块以及mysql模块。每部分不仅提供了基础概念,还推荐了相关博文供深入学习。特别强调了express模块的使用,包括响应相关函数、中间件、Router和请求体数据解析等内容。文章还讨论了静态资源无法访问的问题及其解决方案,并总结了一些通用设置。适合Node.js初学者参考学习。
37 1
|
1月前
|
开发框架 JavaScript 前端开发
Node.js日记:客户端和服务端介绍、Node.js介绍
Node.js日记:客户端和服务端介绍、Node.js介绍
|
2月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
本文介绍了PyTorch中的F.softmax()和F.log_softmax()函数的语法、参数和使用示例,解释了它们在进行归一化处理时的作用和区别。
481 1
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
|
1月前
|
JavaScript 前端开发 开发工具
Node.js——初识Node.js
Node.js——初识Node.js
34 4
|
1月前
|
JavaScript 前端开发 持续交付
构建现代Web应用:Vue.js与Node.js的完美结合
【10月更文挑战第22天】随着互联网技术的快速发展,Web应用已经成为了人们日常生活和工作的重要组成部分。前端技术和后端技术的不断创新,为Web应用的构建提供了更多可能。在本篇文章中,我们将探讨Vue.js和Node.js这两大热门技术如何完美结合,构建现代Web应用。
36 4
|
26天前
|
JSON JavaScript 前端开发
使用JavaScript和Node.js构建简单的RESTful API
使用JavaScript和Node.js构建简单的RESTful API