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 处理网页内容的实现代码
Feb 15 Javascript
jquery.cvtooltip.js 基于jquery的气泡提示插件
Nov 19 Javascript
js 图片随机不定向浮动的实现代码
Jul 02 Javascript
Node+Express+MongoDB实现登录注册功能实例
Apr 23 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)
May 11 Javascript
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
May 20 jQuery
JavaScript与Java正则表达式写法的区别介绍
Aug 15 Javascript
JavaScript时间戳与时间日期间相互转换
Dec 11 Javascript
Node.js搭建WEB服务器的示例代码
Aug 15 Javascript
angularjs1.5 组件内用函数向外传值的实例
Sep 30 Javascript
JavaScript如何使用插值实现图像渐变
Jun 28 Javascript
js回到页面指定位置的三种方式
Dec 17 Javascript
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
PHP gbk环境下json_dencode传送来的汉字
2012/11/13 PHP
在Yii框架中使用PHP模板引擎Twig的例子
2014/06/13 PHP
php metaphone()函数的定义和用法
2016/05/15 PHP
javascript 解决表单仍然提交即使监听处理函数返回false
2010/03/14 Javascript
jquery插件如何使用 jQuery操作Cookie插件使用介绍
2012/12/15 Javascript
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
2013/02/26 Javascript
JQ获取动态加载的图片大小的正确方法分享
2013/11/08 Javascript
利用javaScript实现点击输入框弹出窗体选择信息
2013/12/11 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
javascript搜索框效果实现方法
2015/05/14 Javascript
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
2015/12/16 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
js简单判断flash是否加载完成的方法
2016/06/21 Javascript
浅析JavaScript函数的调用模式
2016/08/10 Javascript
jQuery日程管理插件fullcalendar使用详解
2017/01/07 Javascript
javascript动态创建对象的属性详解
2018/11/07 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
2018/11/30 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
2019/01/19 Javascript
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
Vue切换Tab动态渲染组件的操作
2020/09/21 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
2021/01/26 Javascript
[01:03:41]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第三场 2月2日
2021/03/11 DOTA
python求解数组中两个字符串的最小距离
2018/09/27 Python
详解python编译器和解释器的区别
2019/06/24 Python
利用Python脚本批量生成SQL语句
2020/03/04 Python
用pip给python安装matplotlib库的详细教程
2021/02/24 Python
css 省略号 css3让多余的字符串消失并附加省略号的实现代码
2013/02/07 HTML / CSS
html5通过postMessage进行跨域通信的方法
2017/12/04 HTML / CSS
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
大众服装店创业计划书范文
2014/01/01 职场文书
劲霸男装广告词改编版
2014/03/21 职场文书
岗位说明书标准范本
2014/07/30 职场文书
杭州黄龙洞导游词
2015/02/10 职场文书
施工安全保证书
2015/05/09 职场文书
新手初学Java网络编程
2021/07/07 Java/Android
golang为什么要统一错误处理
2022/04/03 Golang