log4js 安装和配置

喜欢而已 提交于 2019-12-17 13:30:13

在 nodeJS 开发中,不能直接使用 console.log 打印相关日志并 debug。所以,查阅资料后,可以使用 log4js 在终端打印日志。下面是具体的安装和使用。

除了直接打印日志,这个库还支持这些功能:支持使用不同颜色标记和打印日志;文件类型的日志输出源,并可通过配置支持基于文件大小或日期进行日志回滚;支持日志分级和日志分类;可配置的日志信息模式。

基本用法

'use strict';
let log4js = require('log4js');
let logger = log4js.getLogger();

logger.debug('this is debug');
logger.info('this is info');
logger.warn('this is warn'); 

运行

node log.js

注意:如果没有全局安装 log4js 会报错,然后执行

sudo npm install log4js -g
# 使用npm install -g 'xxx' 之后仍然报 
# Cannot find module 'xxx' 错误,可以通过设置环境变量来解决; 

export NODE_PATH=/usr/local/lib/node_modules/  
echo $NODE_PATH  
# 运行就可以正常执行
# https://blog.csdn.net/wmsjlihuan/article/details/19816389

发现没有,什么输出也没有?为什么呢?
因为log4js的缺省级别是off,也就是所有的都不会输出。

指定输出级别

'use strict';
let log4js = require('log4js');
let logger = log4js.getLogger();
logger.level = 'info';

logger.debug('this is debug');
logger.info('this is info');
logger.warn('this is warn');

再运行:

node log.js
[2019-05-24T07:04:36.167] [INFO] default - this is info
[2019-05-24T07:04:36.169] [WARN] default - this is warn
# 控制台会显示 info warn 信息,但是 debug 信息不显示

这样info以及以上级别的log都能够正常输出了。

如果需要输出全部信息,把 logger.level = ‘debug’ 即可。下面是全部的等级。

ALL
TRACE
DEBUG
INFO
WARN
ERROR
FATAL
MARK
OFF

设置全局级别

前面例子设置了单个logger的输出级别,现在设置所有logger的缺省级别。

创建 log 配置文件 logconf.json (日志类型,日志级别,输出源)

{
  "appenders": {
    "consoleout": { "type": "console" }
  },
  "categories": {
    "default": { "appenders": [ "consoleout" ], "level": "debug" }
  }
}

全局加载配置

'use strict';

let config = require('./logconf.json');
let log4js = require('log4js');
log4js.configure(config);

let logger = log4js.getLogger();
logger.debug('this is debug');
logger.info('this is info');
logger.warn('this is warn');

运行

node log.js
[2019-05-24T07:10:10.557] [DEBUG] default - this is debug
[2019-05-24T07:10:10.560] [INFO] default - this is info
[2019-05-24T07:10:10.560] [WARN] default - this is warn

因为在配置文件里把level设置成了debug,这样三个log行都打出来了。

目前支持的日志

SMTP:以邮件形式发送日志;
GELF ( Graylog Extended Log Format,graylog扩展日志格式),能够规避传统的系统级日志的未压缩、1024字节长度限制、无数据类型等缺点;它只依赖于node的udp模块支持,可以通过udp协议发送日志到兼容gelf的服务器;
File 将日志输出到指定文件;
console 将日志打印到控制台;
redis 将日志事件存储到redis数据库;

综合使用

let log4js = require('log4js');

log4js.configure({
  appenders: {test: {
    type: 'console',
  }},
  categories: { default: { appenders: ['test'], level: 'error' } }
});

let logger = log4js.getLogger('test');
logger.level = 'warn';

logger.debug('debug...');
logger.info('info...');
logger.warn('warn...');
logger.error('error...');
console.log('start...');

参考文献

官网上说的很详细

https://www.npmjs.com/package/log4js

https://github.com/log4js-node/log4js-node

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!