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 禁止复制网页
Jun 11 Javascript
JavaScript 学习笔记(七)字符串的连接
Dec 31 Javascript
jQuery学习笔记之2个小技巧
Jan 19 Javascript
jquery实现的缩略图预览滑块实例
Jun 25 Javascript
jQuery实现的倒计时效果实例小结
Apr 16 Javascript
JQuery异步加载PartialView的方法
Jun 07 Javascript
轮播的简单实现方法
Jul 28 Javascript
JS中用try catch对代码运行的性能影响分析
Dec 26 Javascript
JavaScript中offsetWidth的bug及解决方法
May 17 Javascript
jQuery实现简单复制json对象和json对象集合操作示例
Jul 09 jQuery
Vue页面手动刷新,实现导航栏激活项还原到初始状态
Aug 06 Javascript
Vue3.0 手写放大镜效果
Jul 25 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
PHP反射基础知识回顾
2020/09/10 PHP
Jquery弹出窗口插件 LeanModal的使用方法
2012/03/10 Javascript
JavaScript 更严格的相等 [译]
2012/09/20 Javascript
Js动态添加复选框Checkbox的实例方法
2013/04/08 Javascript
jQuery设置指定网页元素宽度和高度的方法
2015/03/25 Javascript
javascript中if和switch,==和===详解
2015/07/30 Javascript
JavaScript中获取纯正的undefined的方法
2016/03/06 Javascript
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
2016/04/03 Javascript
jQuery Password Validation密码验证
2016/12/30 Javascript
用Object.prototype.toString.call(obj)检测对象类型原因分析
2018/10/11 Javascript
vue-cli 3 全局过滤器的实例代码详解
2019/06/03 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
JS回调函数 callback的理解与使用案例分析
2019/09/09 Javascript
js滚轮事件 js自定义滚动条的实现
2020/01/18 Javascript
python模拟登陆Tom邮箱示例分享
2014/01/13 Python
零基础写python爬虫之使用urllib2组件抓取网页内容
2014/11/04 Python
Python实现的数据结构与算法之基本搜索详解
2015/04/22 Python
python 调用HBase的简单实例
2016/12/18 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
Python 获取主机ip与hostname的方法
2018/12/17 Python
python实现控制COM口的示例
2019/07/03 Python
使用Keras预训练好的模型进行目标类别预测详解
2020/06/27 Python
聊聊python中的异常嵌套
2020/09/01 Python
HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
2013/01/30 HTML / CSS
HTML5 离线应用之打造零请求、无流量网站的解决方法
2013/04/25 HTML / CSS
Richards网上商店:当代时尚,遍布巴西
2019/11/03 全球购物
Clarks鞋澳大利亚官方网站:Clarks Australia
2019/12/25 全球购物
英国婴儿产品专家:Samuel Johnston
2020/04/20 全球购物
"引用"与多态的关系
2013/02/01 面试题
英语自荐信常用语句
2013/12/13 职场文书
低碳环保口号
2014/06/12 职场文书
课堂打架检讨书200字
2014/11/21 职场文书
2016年领导干部正风肃纪心得体会
2015/10/09 职场文书
如何使用Python提取Chrome浏览器保存的密码
2021/06/09 Python
Python的这些库,你知道多少?
2021/06/09 Python
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js