Express进阶之log4js实用入门指南


Posted in Javascript onFebruary 10, 2018

对于线上项目用来说,日志是非常重要的一环。log4js是使用得比较多的一个日志组件,经常跟Express一起配合使用。本文从入门实例开始,讲解log4js的使用,以及如何跟Express进行整合。

入门例子

输出日志如下,包括日志打印时间、日志级别、日志分类、日志内容。

// started.js
var log4js = require('log4js');
var logger = log4js.getLogger();
logger.debug('hello world');

// 输出: 
// [2017-02-28 21:28:22.853] [DEBUG] [default] - hello world

日志级别

logger.setLevel('INFO'); 表示想要打印的最低级别的日志是 INFO ,也就是说,调用类似 logger.debug() 等级别低于 INFO 的接口,日志是不会打印出来的。

var log4js = require('log4js');
var logger = log4js.getLogger();
logger.setLevel('INFO');

logger.debug('level: debug');
logger.info('level: info');
logger.error('level: error');

// 输出如下:
// [2017-02-28 21:50:45.372] [INFO] [default] - level: info
// [2017-02-28 21:50:45.376] [ERROR] [default] - level: error

日志类别

除级别外,还可以对日志进行分类, log4js.getLogger(category) ,如下所示

var log4js = require('log4js');
var alogger = log4js.getLogger('category-a');
var blogger = log4js.getLogger('category-b');

alogger.info('hello');
blogger.info('hello');

// 输出如下:
// [2017-02-28 22:36:57.570] [INFO] category-a - hello
// [2017-02-28 22:36:57.574] [INFO] category-b - hello

appenders

appenders指定日志输出的位置,可以同时配置多个,用category进行区分。比如 log4js.getLogger('info') 应用的就是 type 为 dateFile 的配置。

可以注意到, type 为 console 的配置没有声明 category ,因此,所有的日志都会打印到控制台。

var log4js = require('log4js');

log4js.configure({
  appenders: [
    { type: 'console'},
    { type: 'dateFile', filename: './logs/info.log', category: 'info' }
  ]
});

var logger = log4js.getLogger('info');
logger.setLevel('INFO');

logger.trace('trace');
logger.debug('debug');
logger.info('info');

// 输出如下:
// [2017-02-28 22:51:30.723] [INFO] info - info

express应用

一个比较简单的例子如下,日志全部打印到控制台。

var express = require('express');
var log4js = require('log4js');
var app = express();

log4js.configure({
  appenders: [
    { type: 'console', category: 'app' }
  ]
});

var logger = log4js.getLogger('app');

logger.setLevel('INFO'); // 级别 > INFO 的日志才会被打印

app.use( log4js.connectLogger(logger) );

app.use(function(req, res, next){
  res.send('ok');
});

app.listen(3000);

访问 http://127.0.0.1:3000 ,打印日志如下

[2017-03-01 00:28:29.301] [INFO] app - ::ffff:127.0.0.1 - - "GET / HTTP/1.1" 304 - "" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"

log4js.connectLogger(logger) 时,可以声明日志的级别。

// 级别 > INFO 的日志才会被打印
logger.setLevel('INFO'); 

// 日志的级别是 WARN 
app.use( log4js.connectLogger(logger, {level: 'WARN'}) );

注意,如果声明的日志级别低于 logger.setLevel(level) 限定的级别,那么日志不会被打印,如下例子。

logger.setLevel('INFO'); 

app.use( log4js.connectLogger(logger, {level: 'DEBUG'}) );

相关链接

官网:https://github.com/nomiddlename/log4js-node

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery 简便实现页面元素数据验证功能
Mar 24 Javascript
JQuery 返回布尔值Is()条件判断方法代码
May 14 Javascript
jquery仿京东导航/仿淘宝商城左侧分类导航下拉菜单效果
Apr 24 Javascript
jquery表单验证插件(jquery.validate.js)的3种使用方式
Mar 28 Javascript
jQuery中prepend()方法使用详解
Aug 11 Javascript
jQuery on()方法绑定动态元素的点击事件实例代码浅析
Jun 16 Javascript
vue实现简单实时汇率计算功能
Jan 15 Javascript
jquery实现表单获取短信验证码代码
Mar 13 Javascript
js 显示日期时间的实例(时间过一秒加1)
Oct 25 Javascript
ios中视频的最后一桢问题解决
May 14 Javascript
js 闭包深入理解与实例分析
Mar 19 Javascript
jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作示例
Jun 02 jQuery
Vue完整项目构建(进阶篇)
Feb 10 #Javascript
JS简单获得节点元素的方法示例
Feb 10 #Javascript
JS简单添加元素新节点的方法示例
Feb 10 #Javascript
vue.js系列中的vue-fontawesome使用
Feb 10 #Javascript
集成vue到jquery/bootstrap项目的方法
Feb 10 #jQuery
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
Feb 10 #Javascript
vue2.0组件之间传值、通信的多种方式(干货)
Feb 10 #Javascript
You might like
用文本文件实现的动态实时发布新闻的程序
2006/10/09 PHP
php结合ajax实现赞、顶、踩功能实例
2014/05/12 PHP
ajax 同步请求和异步请求的差异分析
2011/07/04 Javascript
javascript中全局对象的isNaN()方法使用介绍
2013/12/19 Javascript
JQuery的Ajax请求实现局部刷新的简单实例
2014/02/11 Javascript
jQuery获取单击节点对象的方法
2016/06/02 Javascript
第五篇Bootstrap 排版
2016/06/21 Javascript
详解Angular2 关于*ngFor 嵌套循环
2017/05/22 Javascript
JavaScript数据结构之双向链表和双向循环链表的实现
2017/11/28 Javascript
使用selenium抓取淘宝的商品信息实例
2018/02/06 Javascript
javascript中toFixed()四舍五入使用方法详解
2018/09/28 Javascript
angular中子控制器向父控制器传值的实例
2018/10/08 Javascript
微信小程序遍历Echarts图表实现多个饼图
2019/04/25 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
2019/07/31 jQuery
layui中select,radio设置不生效的解决方法
2019/09/05 Javascript
JS操作json对象key、value的常用方法分析
2019/10/29 Javascript
js对象属性名驼峰式转下划线的实例代码
2020/09/17 Javascript
JavaScript实现无限轮播效果
2020/11/19 Javascript
Python采集腾讯新闻实例
2014/07/10 Python
Python配置文件解析模块ConfigParser使用实例
2015/04/13 Python
python 捕获 shell/bash 脚本的输出结果实例
2017/01/04 Python
Python实现通过文件路径获取文件hash值的方法
2017/04/29 Python
Python创建一个空的dataframe,并循环赋值的方法
2018/11/08 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
2019/02/12 Python
提高python代码运行效率的一些建议
2020/09/29 Python
10个示例带你掌握python中的元组
2020/11/23 Python
求职者简历中的自我评价
2013/10/20 职场文书
标准毕业生自荐信范文
2013/11/04 职场文书
材料专业大学毕业生自荐书
2014/07/02 职场文书
2014四风问题对照检查材料范文
2014/09/15 职场文书
教师党员批评与自我批评
2014/10/15 职场文书
文明单位创建材料
2014/12/24 职场文书
2015社区六五普法工作总结
2015/04/21 职场文书
2015年乡镇环保工作总结
2015/04/22 职场文书
2015年管理人员工作总结
2015/05/13 职场文书
Python中rapidjson参数校验实现
2021/07/25 Python