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 相关文章推荐
Prototype使用指南之range.js
Jan 10 Javascript
JavaScript 动态创建VML的方法
Oct 14 Javascript
基于jquery的滚动鼠标放大缩小图片效果
Oct 27 Javascript
创建js对象和js类的方法汇总
Dec 24 Javascript
jQuery中nextUntil()方法用法实例
Jan 07 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
Aug 03 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
Jun 13 Javascript
node前端开发模板引擎Jade的入门
May 11 Javascript
解决vue单页路由跳转后scrollTop的问题
Sep 03 Javascript
微信小程序实现录音时的麦克风动画效果实例
May 18 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
Jul 22 Javascript
Vue——前端生成二维码的示例
Dec 19 Vue.js
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
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
php中ltrim()、rtrim()与trim()删除字符空格实例
2014/11/25 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
2015/04/14 PHP
typecho插件编写教程(一):Hello World
2015/05/28 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
Laravel5.1 框架控制器基础用法实例分析
2020/01/04 PHP
比较搞笑的js陷阱题
2010/02/07 Javascript
Json对象替换字符串占位符实现代码
2010/11/17 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
2012/08/22 Javascript
深入理解JavaScript系列(33):设计模式之策略模式详解
2015/03/03 Javascript
ichart.js绘制虚线、平均分虚线效果的实现代码
2016/05/05 Javascript
AngularJS入门教程之Cookies读写操作示例
2016/11/02 Javascript
jQuery点击导航栏选中更换样式的实现代码
2017/01/23 Javascript
原生JavaScript实现精美的淘宝轮播图效果示例【附demo源码下载】
2017/05/27 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
Vue一次性简洁明了引入所有公共组件的方法
2018/11/28 Javascript
node学习笔记之读写文件与开启第一个web服务器操作示例
2019/05/29 Javascript
Vue编程式跳转的实例代码详解
2019/07/10 Javascript
基于layui轮播图满屏是高度自适应的解决方法
2019/09/16 Javascript
python的keyword模块用法实例分析
2015/06/30 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
2016/06/29 Python
Python批处理删除和重命名文件夹的实例
2018/07/11 Python
Python 实现的 Google 批量翻译功能
2019/08/26 Python
Python reduce函数作用及实例解析
2020/05/08 Python
Python二元算术运算常用方法解析
2020/09/15 Python
Python 使用office365邮箱的示例
2020/10/29 Python
详解如何使用CSS3中的结构伪类选择器和伪元素选择器
2020/01/06 HTML / CSS
HTML5新表单元素_动力节点Java学院整理
2017/07/12 HTML / CSS
开发中都用到了那些设计模式?用在什么场合?
2014/08/21 面试题
卫生院艾滋病宣传活动小结
2014/07/09 职场文书
组工干部对照检查材料
2014/08/25 职场文书
2015年入党积极分子培养考察意见
2015/08/12 职场文书
组织委员竞选稿
2015/11/21 职场文书
2016年圣诞节活动总结范文
2016/04/01 职场文书
详解Redis在SpringBoot工程中的综合应用
2021/10/16 Redis
 Python 中 logging 模块使用详情
2022/03/03 Python