123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- 'use strict';
- const os = require('os');
- const utils = require('../utils');
- const levels = require('../level');
- const ENABLED = Symbol('Transport#enabled');
- /**
- * Transport is an output channel of the log that can be output to a file, console or service.
- * A {@link Logger} can configure multiple Transports to meet a variety of complex needs
- */
- class Transport {
- /**
- * @class
- * @param {Object} options
- * - {String} [level = NONE] - log level. ouput method must higher than this option. if level is `info`, `debug` will disabled
- * - {Function} formatter - format function
- * - {Function} contextFormatter - format function for context logger
- * - {Boolean} [json = false] - log format is json or not
- * - {String} [encoding = utf8] - log encodeing, see {@link https://github.com/ashtuchkin/iconv-lite#supported-encodings}
- * - {String} [eol = os.EOL] - end of line
- */
- constructor(options) {
- this.options = utils.assign(this.defaults, options);
- if (this.options.encoding === 'utf-8') {
- this.options.encoding = 'utf8';
- }
- this.options.level = utils.normalizeLevel(this.options.level);
- this[ENABLED] = true;
- }
- get defaults() {
- return {
- level: 'NONE',
- formatter: null,
- contextFormatter: null,
- json: false,
- encoding: 'utf8',
- eol: os.EOL,
- };
- }
- /**
- * enable or not
- * @return {[type]} [description]
- */
- get enabled() {
- return this[ENABLED];
- }
- /**
- * enable transport
- */
- enable() {
- this[ENABLED] = true;
- }
- /**
- * disable transport
- */
- disable() {
- this[ENABLED] = false;
- }
- set level(level) {
- this.options.level = utils.normalizeLevel(level);
- }
- get level() {
- return this.options.level;
- }
- /**
- * should output log or not
- * @param {String} level log level, must in upper case
- * @return {Boolean} should or not
- */
- shouldLog(level) {
- if (!this[ENABLED]) {
- return false;
- }
- if (this.options.level === levels['NONE']) {
- return false;
- }
- return this.options.level <= levels[level];
- }
- /**
- * Transport log method
- * @param {String} level - log level
- * @param {Array} args - all methods
- * @param {Object} meta - meta infomations
- * @return {Buffer|String} log message
- * - empty string means no log
- * - utf8 encoding return String
- * - other encoding return Buffer
- */
- log(level, args, meta) {
- return utils.format(level, args, meta, this.options);
- }
- /**
- * reload Transport
- */
- reload() {}
- /**
- * close Transport
- */
- close() {}
- end() {}
- }
- module.exports = Transport;
|