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 相关文章推荐
JavaScript高级程序设计 读书笔记之十一 内置对象Global
Mar 07 Javascript
javascript实现动态模态绑定grid过程代码
Sep 22 Javascript
node.js中的fs.lchmodSync方法使用说明
Dec 16 Javascript
jQuery焦点图切换特效代码分享
Sep 15 Javascript
详解JavaScript中的构造器Constructor模式
Jan 14 Javascript
jquery zTree异步加载简单实例讲解
Feb 25 Javascript
微信小程序 HTTPS报错整理常见问题及解决方案
Dec 14 Javascript
node.js实现登录注册页面
Apr 08 Javascript
bootstrap fileinput插件实现预览上传照片功能
Jan 23 Javascript
Angular路由ui-router配置详解
Aug 01 Javascript
Vue中的$set的使用实例代码
Oct 08 Javascript
JS如何实现基于websocket的多端桥接平台
May 14 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最常用的2种设计模式工厂模式和单例模式介绍
2012/08/14 PHP
php生成0~1随机小数的方法(必看)
2017/04/05 PHP
javascript 类方法定义还是有点区别
2009/04/15 Javascript
改变javascript函数内部this指针指向的三种方法
2010/04/23 Javascript
jQuery版仿Path菜单效果
2011/12/15 Javascript
js简单实现根据身份证号码识别性别年龄生日
2013/11/29 Javascript
jquery获取当前日期的方法
2015/01/14 Javascript
jQuery基于cookie实现的购物车实例分析
2015/12/24 Javascript
微信小程序 二维码canvas绘制实例详解
2017/01/06 Javascript
jQuery实现CheckBox全选、全不选功能
2017/01/11 Javascript
详解vue-Resource(与后端数据交互)
2017/01/16 Javascript
浅析javaScript中的浅拷贝和深拷贝
2017/02/15 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
2019/08/07 Javascript
[02:03]完美世界DOTA2联赛10月30日赛事集锦
2020/10/31 DOTA
python如何实现远程控制电脑(结合微信)
2015/12/21 Python
恢复百度云盘本地误删的文件脚本(简单方法)
2017/10/21 Python
python使用邻接矩阵构造图代码示例
2017/11/10 Python
详解python中index()、find()方法
2019/08/29 Python
Python 寻找局部最高点的实现
2019/12/05 Python
PHP基于phpqrcode类库生成二维码过程解析
2020/05/28 Python
Python新手学习装饰器
2020/06/04 Python
python em算法的实现
2020/10/03 Python
详解css3 flex弹性盒自动铺满写法
2020/09/17 HTML / CSS
Html5实现文件异步上传功能
2017/05/19 HTML / CSS
ALLSAINTS英国官网:伦敦新锐潮流品牌
2016/09/19 全球购物
介绍一下JMS编程步骤
2015/09/22 面试题
一百多行代码实现react拖拽hooks
2021/03/23 Javascript
大学优秀班主任事迹材料
2014/05/02 职场文书
代办社保委托书范文
2014/10/06 职场文书
普通党员自我剖析材料
2014/10/07 职场文书
小学教师党员承诺书
2015/04/27 职场文书
旗帜观后感
2015/06/08 职场文书
运动会通讯稿50字
2015/07/20 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
实例详解Python的进程,线程和协程
2022/03/13 Python
MySQL视图概念以及相关应用
2022/04/19 MySQL