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+jqmodal弹出窗口实现代码分明
Jun 14 Javascript
jquery 元素控制(追加元素/追加内容)介绍及应用
Apr 21 Javascript
ScrollDown的基本操作示例
Jun 09 Javascript
纯JavaScript实现HTML5 Canvas六种特效滤镜示例
Jun 28 Javascript
按钮接受回车事件的三种实现方法
Jun 06 Javascript
js上传图片及预览功能实例分析
Apr 24 Javascript
jquery实现表单输入时提示文字滑动向上效果
Aug 10 Javascript
JavaScript屏蔽Backspace键的实现代码
Nov 02 Javascript
解析Json字符串的三种方法日常常用
May 02 Javascript
Vue如何实现响应式系统
Jul 11 Javascript
ES6 Object方法扩展的应用实例分析
Jun 25 Javascript
Vue项目中使用flow做类型检测的方法
Mar 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版(3)
2006/10/09 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
2011/08/18 PHP
PHP更新购物车数量(表单部分/PHP处理部分)
2013/05/03 PHP
PHP闭包实例解析
2014/09/08 PHP
php + nginx项目中的权限详解
2017/05/23 PHP
extJs 下拉框联动实现代码
2010/04/09 Javascript
自己写了一个展开和收起的多更能型的js效果
2013/03/05 Javascript
可以用鼠标拖动的DIV实现思路及代码
2013/10/21 Javascript
js图片自动轮播代码分享(js图片轮播)
2014/05/06 Javascript
一款由jquery实现的整屏切换特效
2014/09/15 Javascript
Bootstrap实现带暂停功能的轮播组件(推荐)
2016/11/25 Javascript
DOM 事件的深入浅出(二)
2016/12/05 Javascript
解析Vue2 dist 目录下各个文件的区别
2017/11/22 Javascript
javascript使用正则实现去掉字符串前面的所有0
2018/07/23 Javascript
vue使用微信扫一扫功能的实现代码
2020/04/11 Javascript
小程序开发之模态框组件封装
2020/04/23 Javascript
详解uniapp的全局变量实现方式
2021/01/11 Javascript
如何利用Fabric自动化你的任务
2016/10/20 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
2017/07/06 Python
win10 64bit下python NLTK安装教程
2018/09/19 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
2020/04/13 Python
解决tensorflow 释放图,删除变量问题
2020/06/23 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
2020/09/29 Python
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
css3的focus-within选择器的使用
2020/05/11 HTML / CSS
加拿大服装和鞋类零售商:Mark’s
2021/01/04 全球购物
好的自荐信的要求
2013/10/30 职场文书
军训心得体会
2013/12/31 职场文书
简历的个人自我评价范文
2014/01/03 职场文书
情人节活动策划方案
2014/02/27 职场文书
绿色出行口号
2014/06/18 职场文书
音乐教育专业自荐信
2014/09/18 职场文书
2016年大学生暑假爱心支教活动策划书
2015/11/26 职场文书
导游词之镇江焦山
2019/11/21 职场文书
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
2022/04/14 Python
Java工作中实用的代码优化技巧分享
2022/04/21 Java/Android