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实现仿银行密码输入框效果的代码
Dec 13 Javascript
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
Aug 02 Javascript
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
Sep 23 Javascript
浅谈JavaScript中的Math.atan()方法的使用
Jun 14 Javascript
jQuery实现下拉框功能实例代码
May 06 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
Dec 28 Javascript
js仿淘宝商品放大预览功能
Mar 15 Javascript
JS实现图片预览的两种方式
Jun 27 Javascript
浅谈vue路径优化之resolve
Oct 13 Javascript
详解如何用babel转换es6的class语法
Apr 03 Javascript
jQuery实现弹幕特效
Nov 29 jQuery
jQuery Datatables 动态列+跨列合并实现代码
Jan 30 jQuery
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基于单例模式编写PDO类的方法
2016/09/13 PHP
php微信公众号开发之现金红包
2018/04/16 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
2019/10/13 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
jQuery对表单元素的取值和赋值操作代码
2011/05/19 Javascript
jquery实现的让超出显示范围外的导航自动固定屏幕最顶上
2011/09/22 Javascript
javascript插入样式实现代码
2012/02/22 Javascript
CSS+jQuery实现的一个放大缩小动画效果
2013/09/24 Javascript
Js参数值中含有单引号或双引号问题的解决方法
2013/11/06 Javascript
JavaScript 学习笔记之操作符
2015/01/14 Javascript
javascript上下方向键控制表格行选中并高亮显示的方法
2015/02/13 Javascript
js基于cookie记录来宾姓名的方法
2016/07/19 Javascript
angular源码学习第一篇 setupModuleLoader方法
2016/10/20 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
JS实现旋转木马式图片轮播效果
2017/01/18 Javascript
JavaScript DOM节点操作实例小结(新建,删除HTML元素)
2017/01/19 Javascript
基于JavaScript实现焦点图轮播效果
2017/03/27 Javascript
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
vue-cli2打包前和打包后的css前缀不一致的问题解决
2018/08/24 Javascript
js实现导航跟随效果
2018/11/17 Javascript
基于vue.js组件实现分页效果
2018/12/29 Javascript
swiper实现异形轮播效果
2019/11/28 Javascript
微信小程序跨页面数据传递事件响应实现过程解析
2019/12/19 Javascript
微信小程序后端无法保持session的原因及解决办法问题
2020/03/20 Javascript
微信小程序实现左滑删除效果
2020/11/18 Javascript
Python+MongoDB自增键值的简单实现
2016/11/04 Python
解决pip install的时候报错timed out的问题
2018/06/12 Python
numpy返回array中元素的index方法
2018/06/27 Python
Python3常见函数range()用法详解
2019/12/30 Python
keras自定义回调函数查看训练的loss和accuracy方式
2020/05/23 Python
英国领先的高级美容和在线皮肤诊所:Face the Future
2020/06/17 全球购物
群胜软件Java笔试题
2012/09/29 面试题
工作评语大全
2014/04/26 职场文书
毕业晚宴祝酒词
2015/08/11 职场文书
zabbix自定义监控nginx状态实现过程
2021/11/01 Servers