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 jQuery $.post $.ajax用法
Jul 09 Javascript
文本框回车提交与禁止提交示例
Sep 27 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
Oct 20 Javascript
教你用jquery实现iframe自适应高度
Jun 11 Javascript
setTimeout()递归调用不加引号出错的解决方法
Sep 05 Javascript
浅析JavaScript事件和方法
Feb 28 Javascript
javascript基本包装类型介绍
Apr 10 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
Jun 27 Javascript
jQuery时间戳和日期相互转换操作示例
Dec 07 jQuery
layui-table对返回的数据进行转变显示的实例
Sep 04 Javascript
Vue.js数字输入框组件使用方法详解
Oct 19 Javascript
Antd的Table组件嵌套Table以及选择框联动操作
Oct 24 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强制下载PDF文件示例
2014/01/17 PHP
php实现按天数、星期、月份查询的搜索框
2016/05/02 PHP
PHP二进制与字符串之间的相互转换教程
2016/10/14 PHP
js模仿windows桌面图标排列算法具体实现(附图)
2013/06/16 Javascript
仿谷歌主页js动画效果实现代码
2013/07/14 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
2014/04/23 Javascript
jQuery获得子元素个数的方法
2015/04/14 Javascript
JavaScript实现的简单幂函数实例
2015/04/17 Javascript
javascript控制层显示或隐藏的方法
2015/07/22 Javascript
JavaScript节点及列表操作实例小结
2015/08/05 Javascript
jQuery Easy UI中根据第一个下拉框选中的值设置第二个下拉框是否可以编辑
2016/11/29 Javascript
JavaScript中String对象的方法介绍
2017/01/04 Javascript
JavaScript中英文字符长度统计方法示例【按照中文占2个字符】
2017/01/17 Javascript
angular实现表单验证及提交功能
2017/02/01 Javascript
JavaScript实现翻页功能(附效果图)
2017/02/16 Javascript
详解微信小程序设置底部导航栏目方法
2017/06/29 Javascript
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
axios进阶实践之利用最优雅的方式写ajax请求
2017/12/20 Javascript
详解小程序缓存插件(mrc)
2018/08/17 Javascript
如何实现一个webpack模块解析器
2018/10/24 Javascript
使用layui实现树形结构的方法
2019/09/20 Javascript
python实现一个简单的并查集的示例代码
2018/03/19 Python
在python中利用opencv简单做图片比对的方法
2019/01/24 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
2019/09/28 Python
Python数据可视化图实现过程详解
2020/06/12 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
2020/09/29 Python
基督教卡片、励志礼品、家居装饰等:DaySpring
2018/10/12 全球购物
广州喜创信息技术有限公司JAVA软件工程师笔试题
2012/10/17 面试题
农药学硕士毕业生自荐信
2013/09/25 职场文书
教师的实习自我鉴定
2013/12/17 职场文书
优秀学生自我鉴定范例
2013/12/18 职场文书
班组建设经验交流材料
2014/05/12 职场文书
房屋租赁合同协议书范本
2014/10/19 职场文书
小学生教师节广播稿
2015/08/19 职场文书
Mysql Innodb存储引擎之索引与算法
2022/02/15 MySQL
Redis基本数据类型List常用操作命令
2022/06/01 Redis