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 相关文章推荐
FireFox JavaScript全局Event对象
Jun 14 Javascript
Javascript isArray 数组类型检测函数
Oct 08 Javascript
Jquery图形报表插件 jqplot简介及参数详解
Oct 10 Javascript
导入extjs、jquery 文件时$使用冲突问题解决方法
Jan 14 Javascript
JS判断浏览器是否支持某一个CSS3属性的方法
Oct 17 Javascript
jQuery实现鼠标滚轮动态改变样式或效果
Jan 05 Javascript
jQuery实现点击小图显示大图代码分享
Aug 25 Javascript
webpack中如何使用雪碧图的示例代码
Nov 11 Javascript
js操作table中tr的顺序实现上移下移一行的效果
Nov 22 Javascript
一秒学会微信小程序制作table表格
Feb 14 Javascript
微信小程序实现消息框弹出动画
Apr 18 Javascript
vue如何搭建多页面多系统应用
Jun 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
MOTOROLA 摩托罗拉 MODEL 66-XI五灯中波收音机
2021/03/02 无线电
php简单日历函数
2015/10/28 PHP
Yii2 assets清除缓存的方法
2016/05/16 PHP
PHP5.5新特性之yield理解与用法实例分析
2019/01/11 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
2019/09/30 PHP
JS实现静止元素自动移动示例
2014/04/14 Javascript
深入浅出理解javaScript原型链
2015/05/09 Javascript
js+html5实现canvas绘制圆形图案的方法
2015/06/05 Javascript
jQuery实用技巧必备(中)
2015/11/03 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
BootStrap modal模态弹窗使用小结
2016/10/26 Javascript
基于JavaScript实现随机颜色输入框
2016/12/10 Javascript
jquery实现异步加载图片(懒加载图片一种方式)
2017/04/24 jQuery
jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】
2017/04/28 jQuery
详解ES6语法之可迭代协议和迭代器协议
2018/01/13 Javascript
nodejs实现连接mongodb数据库的方法示例
2018/03/15 NodeJs
vue.js实现图书管理功能
2019/09/24 Javascript
JS控制下拉列表左右选择实例代码
2020/05/08 Javascript
解决pycharm双击但是无法打开的情况
2020/10/31 Javascript
[27:08]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第二场 11.21
2020/11/23 DOTA
跟老齐学Python之使用Python查询更新数据库
2014/11/25 Python
Python采集猫眼两万条数据 对《无名之辈》影评进行分析
2018/12/05 Python
浅谈python新式类和旧式类区别
2019/04/26 Python
Python实现把类当做字典来访问
2019/12/16 Python
解决TensorFlow模型恢复报错的问题
2020/02/06 Python
django-crontab实现服务端的定时任务的示例代码
2020/02/17 Python
世界上最大的折扣香水店:FragranceNet.com
2016/10/26 全球购物
德国孕妇装和婴童服装网上商店:bellybutton
2018/04/12 全球购物
北京SQL新华信咨询
2016/09/30 面试题
大学毕业登记表自我鉴定
2013/10/09 职场文书
征用土地赔偿协议书
2014/09/26 职场文书
2015年世界艾滋病日活动总结
2015/03/24 职场文书
python 爬取哔哩哔哩up主信息和投稿视频
2021/06/07 Python
idea搭建可运行Servlet的Web项目
2021/06/26 Java/Android
MySQL对数据表已有表进行分区表的实现
2021/11/01 MySQL
生命的关键成分来自太空?陨石说是的
2022/04/29 数码科技