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 相关文章推荐
JS中使用apply、bind实现为函数或者类传入动态个数的参数
Apr 26 Javascript
AngularJS基础 ng-focus 指令简单示例
Aug 01 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
Sep 21 Javascript
微信小程序 wx:key详细介绍
Oct 28 Javascript
基于Vue如何封装分页组件
Dec 16 Javascript
js获取一组日期中最近连续的天数
May 25 Javascript
React利用插件和不用插件实现双向绑定的方法详解
Jul 03 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
Oct 19 Javascript
详解Node.js异步处理的各种写法
Jun 09 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
May 20 Javascript
解决vuex刷新数据消失问题
Nov 12 Javascript
解决await在forEach中不起作用的问题
Feb 25 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 开发工具
2006/12/06 PHP
adodb与adodb_lite之比较
2006/12/31 PHP
php实现在线通讯录功能(附源码)
2016/05/13 PHP
ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解
2019/04/03 PHP
HTML node相关的一些资料整理
2010/01/01 Javascript
JavaScript学习笔记(二) js对象
2011/10/25 Javascript
如何将JS的变量值传递给ASP变量
2012/12/10 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
jQuery的观察者模式详解
2014/12/22 Javascript
javascript实现炫酷的拖动分页
2015/05/11 Javascript
javascript框架设计之类工厂
2015/06/23 Javascript
Javascript基于AJAX回调函数传递参数实例分析
2015/12/15 Javascript
AngularJS基础 ng-srcset 指令简单示例
2016/08/03 Javascript
jQuery Easyui Tabs扩展根据自定义属性打开页签
2016/08/15 Javascript
React中使用collections时key的重要性详解
2017/08/07 Javascript
Angular学习教程之RouterLink花式跳转
2018/05/03 Javascript
jQuery+CSS实现的标签页效果示例【测试可用】
2018/08/14 jQuery
vue地址栏直接输入路由无效问题的解决
2018/11/15 Javascript
在Vant的基础上封装下拉日期控件的代码示例
2018/12/05 Javascript
浅谈Angular单元测试总结
2019/03/22 Javascript
在Koa.js中实现文件上传的接口功能
2019/10/08 Javascript
关于django 数据库迁移(migrate)应该知道的一些事
2018/05/27 Python
django认证系统实现自定义权限管理的方法
2018/07/16 Python
django框架使用orm实现批量更新数据的方法
2019/06/21 Python
基于numpy中的expand_dims函数用法
2019/12/18 Python
Python pip安装模块提示错误解决方案
2020/05/22 Python
Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码
2020/05/28 Python
Pytorch实现将模型的所有参数的梯度清0
2020/06/24 Python
CSS3径向渐变之大鱼吃小鱼之孤单的大鱼
2016/04/26 HTML / CSS
Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公式)
2020/03/18 HTML / CSS
全球性的在线鞋类品牌:Public Desire
2019/04/03 全球购物
娱乐地球:Entertainment Earth
2020/01/08 全球购物
公司清洁工岗位职责
2013/12/14 职场文书
认真学习保证书
2015/02/26 职场文书
行政人事专员岗位职责
2015/04/07 职场文书
门卫管理制度范本
2015/08/05 职场文书