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 相关文章推荐
优秀js开源框架-jQuery使用手册(1)
Mar 10 Javascript
键盘 keycode的值 javascript时触发事件时很有用的要素
Nov 02 Javascript
js对数字的格式化使用说明
Jan 12 Javascript
AeroWindow 基于JQuery的弹出窗口插件
Jun 27 Javascript
JS 各种网页尺寸判断实例方法
Apr 18 Javascript
jquery 提交值不为空的元素示例代码
May 10 Javascript
Jquery实现列表(隔行换色,全选,鼠标滑过当前行)效果实例
Jun 09 Javascript
jQuery.holdReady()使用方法
May 20 Javascript
javascript实现多栏闭合展开式广告位菜单效果实例
Aug 05 Javascript
vue axios 简单封装以及思考
Oct 09 Javascript
微信小程序实现张图片合成为一张并下载
Jul 16 Javascript
使用layui 的layedit定义自己的toolbar方法
Sep 18 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+APACHE实现用户论证的方法
2006/10/09 PHP
使用PHP和JavaScript判断请求是否来自微信内浏览器
2015/08/18 PHP
Laravel实现构造函数自动依赖注入的方法
2016/03/16 PHP
php静态成员方法和静态的成员属性的使用方法
2017/10/26 PHP
基于JQuery的简单实现折叠菜单代码
2010/09/15 Javascript
通过pjax实现无刷新翻页(兼容新版jquery)
2014/01/31 Javascript
jQuery选择器简明总结(含用法实例,一目了然)
2014/04/25 Javascript
全面解析node 表单的图片上传
2016/11/21 Javascript
深入理解vue.js双向绑定的实现原理
2016/12/05 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
AngularJS读取JSON及XML文件的方法示例
2017/05/25 Javascript
基于D3.js实现时钟效果
2018/07/17 Javascript
vue删除html内容的标签样式实例
2018/09/13 Javascript
vue-cli2与vue-cli3在一台电脑共存的实现方法
2019/09/25 Javascript
node.js中事件触发器events的使用方法实例分析
2019/11/23 Javascript
基于Vue+Webpack拆分路由文件实现管理
2020/11/16 Javascript
[36:37]2014 DOTA2华西杯精英邀请赛5 24 VG VS iG
2014/05/25 DOTA
pygame学习笔记(2):画点的三种方法和动画实例
2015/04/15 Python
Python中在脚本中引用其他文件函数的实现方法
2016/06/23 Python
python利用标准库如何获取本地IP示例详解
2017/11/01 Python
Python selenium抓取微博内容的示例代码
2018/05/17 Python
Python使用cx_Freeze库生成msi格式安装文件的方法
2018/07/10 Python
在python中实现调用可执行文件.exe的3种方法
2019/07/07 Python
PyTorch安装与基本使用详解
2020/08/31 Python
如何使用 Python 读取文件和照片的创建日期
2020/09/05 Python
一款纯css3实现的鼠标悬停动画按钮
2014/12/29 HTML / CSS
HTML5组件Canvas实现图像灰度化(步骤+实例效果)
2013/04/22 HTML / CSS
html5 实现客户端验证上传文件的大小(简单实例)
2016/05/15 HTML / CSS
Bose加拿大官方网站:美国知名音响品牌
2019/03/21 全球购物
MySQL面试题
2014/01/12 面试题
省优秀教师事迹材料
2014/01/30 职场文书
委托书格式范文
2015/01/28 职场文书
汽车4S店前台接待岗位职责
2015/04/03 职场文书
2015年教研室工作总结范文
2015/05/23 职场文书
运动会新闻稿
2015/07/17 职场文书
2016年6月份红领巾广播稿
2015/12/21 职场文书