发布时间:2019-02-18编辑:佚名阅读(1726)
Log4js 具有以下功能
1 彩色控制台记录到标准输出或标准错误
2 文件appender,可根据文件大小或日期进行可配置的日志滚动
3 多进程appender(当你有多个服务器但想要集中记录时很有用)
4 不同日志类别的不同日志级别(使您的应用程序日志的某些部分为DEBUG,其他部分仅为ERRORS等)
…等
1 极简使用sample
var log4js = require('log4js'); var logger = log4js.getLogger(); logger.level = 'debug'; logger.debug("Some debug messages");
2 Log4js log级别
ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < MARK < OFF
3 log4js配置
var log4js = require('log4js');//加载log4js var logger = log4js.getLogger();//获取当前log4js配置 无参数为默认 logger.debug("Some debug messages");//使用
这里我们就着重介绍log4js配置
3.1 log4js config 配置介绍
Log4js config下面有三个重要属性:
appenders:记录器对象,自定义不同的记录器(log输出位置)。
categories:log 类型,自定义log不同输出方式。
level:log输出等级,大于某等级的log才会输出。
本人使用配置方式为categories内 组合不同的记录器和输出等级 实现不同条件下的log输出。
3.2 sample介绍
下面将针对 一段配置code 进行介绍:
const log4js = require('log4js'); let programName = "log4jstest"; log4js.configure({ appenders:{ console:{//记录器1:输出到控制台 type : 'console', }, log_file:{//记录器2:输出到文件 type : 'file', filename: __dirname + `/logs/${programName}.log`,//文件目录,当目录文件或文件夹不存在时,会自动创建 maxLogSize : 20971520,//文件最大存储空间(byte),当文件内容超过文件存储空间会自动生成一个文件test.log.1的序列自增长的文件 backups : 3,//default value = 5.当文件内容超过文件存储空间时,备份文件的数量 //compress : true,//default false.是否以压缩的形式保存新文件,默认false。如果true,则新增的日志文件会保存在gz的压缩文件内,并且生成后将不被替换,false会被替换掉 encoding : 'utf-8',//default "utf-8",文件的编码 }, data_file:{//:记录器3:输出到日期文件 type: "dateFile", filename: __dirname + `/logs/${programName}`,//您要写入日志文件的路径 alwaysIncludePattern: true,//(默认为false) - 将模式包含在当前日志文件的名称以及备份中 daysToKeep:10,//时间文件 保存多少天,距离当前天daysToKeep以前的log将被删除 //compress : true,//(默认为false) - 在滚动期间压缩备份文件(备份文件将具有.gz扩展名) pattern: "-yyyy-MM-dd-hh.log",//(可选,默认为.yyyy-MM-dd) - 用于确定何时滚动日志的模式。格式:.yyyy-MM-dd-hh:mm:ss.log encoding : 'utf-8',//default "utf-8",文件的编码 }, error_file:{//:记录器4:输出到error log type: "dateFile", filename: __dirname + `/../logs/${programName}_error`,//您要写入日志文件的路径 alwaysIncludePattern: true,//(默认为false) - 将模式包含在当前日志文件的名称以及备份中 daysToKeep:10,//时间文件 保存多少天,距离当前天daysToKeep以前的log将被删除 //compress : true,//(默认为false) - 在滚动期间压缩备份文件(备份文件将具有.gz扩展名) pattern: "_yyyy-MM-dd.log",//(可选,默认为.yyyy-MM-dd) - 用于确定何时滚动日志的模式。格式:.yyyy-MM-dd-hh:mm:ss.log encoding : 'utf-8',//default "utf-8",文件的编码 // compress: true, //是否压缩 } }, categories: { default:{appenders:['data_file', 'console', 'log_file'], level:'info' },//默认log类型,输出到控制台 log文件 log日期文件 且登记大于info即可 production:{appenders:['data_file'], level:'warn'}, //生产环境 log类型 只输出到按日期命名的文件,且只输出警告以上的log console:{appenders:['console'], level:'debug'}, //开发环境 输出到控制台 debug:{appenders:['console', 'log_file'], level:'debug'}, //调试环境 输出到log文件和控制台 error_log:{appenders:['error_file'], level:'error'}//error 等级log 单独输出到error文件中 任何环境的errorlog 将都以日期文件单独记录 }, }); module.exports = log4js.getLogger('console'); module.exports.error = log4js.getLogger('error_log');//error单独输出到一个文件中
1 该config定义了 三个记录器console(输出到控制台), log_file(输出到文件), data_file(输出到日期文件)
2 该config定义了4中log输出类型default,production, console, debug
default类型,配置了三种记录器,将会输出到data_file(日期log文件), console(控制台)
log_file(log文件),且只会输出大于等于info的log。
production类型,配置了一种记录器,只会输出到data_file(日期log文件),且只会输出大于等于warn级别的log。
console类型,配置了一种记录器,只会输出到console(控制台),且只会输出大于等于debug级别的log。
debug类型,配置了两种记录器,输出到console(控制台)和 'log_file(log文件),且只会输出大于等于debug级别的log。
使用:
var logger = log4js.getLogger(); logger.info("hello world categories-default test, this is info"); logger.debug("hello world categories-default test, this is debug"); logger.warn("hello world categories-default test, this is warn"); logger.error("hello world categories-default test, this is error"); logger = log4js.getLogger('production'); logger.info("hello world categories-production test, this is info"); logger.debug("hello world categories-production test, this is debug"); logger.warn("hello world categories-production test, this is warn"); logger.error("hello world categories-production test, this is error"); logger = log4js.getLogger('console'); //引用的categories 类型中的console 即输出到console控制台 输出日志级别info(大于info输出) logger.info("hello world categories-console test"); logger = log4js.getLogger('debug'); logger.info("hello world categories-debug test, this is info"); logger.debug("hello world categories-debug test, this is debug");
输出结果如下:
控制台输出内容 [2018-05-15T10:08:51.014] [INFO] default - hello world categories-default test, this is info [2018-05-15T10:08:51.021] [WARN] default - hello world categories-default test, this is warn [2018-05-15T10:08:51.022] [ERROR] default - hello world categories-default test, this is error [2018-05-15T10:08:51.022] [INFO] console - hello world categories-console test [2018-05-15T10:08:51.022] [INFO] debug - hello world categories-debug test, this is info [2018-05-15T10:08:51.022] [DEBUG] debug - hello world categories-debug test, this is debug 普通log文件: [2018-05-15T10:08:51.014] [INFO] default - hello world categories-default test, this is info [2018-05-15T10:08:51.021] [WARN] default - hello world categories-default test, this is warn [2018-05-15T10:08:51.022] [ERROR] default - hello world categories-default test, this is error [2018-05-15T10:08:51.022] [INFO] debug - hello world categories-debug test, this is info [2018-05-15T10:08:51.022] [DEBUG] debug - hello world categories-debug test, this is debug 时间log文件: [2018-05-15T10:08:51.014] [INFO] default - hello world categories-default test, this is info [2018-05-15T10:08:51.021] [WARN] default - hello world categories-default test, this is warn [2018-05-15T10:08:51.022] [ERROR] default - hello world categories-default test, this is error [2018-05-15T10:08:51.022] [WARN] production - hello world categories-production test, this is warn [2018-05-15T10:08:51.022] [ERROR] production - hello world categories-production test, this is error
4 与express框架结合
在app.js 使用以下语句即可替换express默认输出
const log4js = require('log4js'); var logger = require('./config/log4js'); var app = express(); app.use(log4js.connectLogger(logger, {level:'auto', format:':method :url :status :response-time ms'}));
format 为express 输出格式
先输出请求方法 在输出url 最后输出http状态码 和响应事件
结果如下:
GET /v1/users/messages?msgid=5afbfbc065e7640936380c1e&status=1 200 8 ms
0人
0人
0人
0人