123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- const fs = require("fs");
- const path = require("path");
- // Will use chalk if chalk is available to add color to console logging
- let chalk;
- let printRed;
- let printYellow;
- let printGray;
- try {
- chalk = require('chalk');
- printRed = chalk.red;
- printYellow = chalk.yellow;
- printGray = chalk.gray;
- }
- catch (e) {
- printRed = printYellow = printGray = (msg) => {
- return msg;
- };
- }
- var LogLevel;
- (function (LogLevel) {
- LogLevel[LogLevel["ERROR"] = 0] = "ERROR";
- LogLevel[LogLevel["WARN"] = 1] = "WARN";
- LogLevel[LogLevel["INFO"] = 2] = "INFO";
- LogLevel[LogLevel["DEBUG"] = 3] = "DEBUG";
- })(LogLevel = exports.LogLevel || (exports.LogLevel = {}));
- var WriteTo;
- (function (WriteTo) {
- WriteTo[WriteTo["CONSOLE"] = 0] = "CONSOLE";
- WriteTo[WriteTo["FILE"] = 1] = "FILE";
- WriteTo[WriteTo["BOTH"] = 2] = "BOTH";
- WriteTo[WriteTo["NONE"] = 3] = "NONE";
- })(WriteTo = exports.WriteTo || (exports.WriteTo = {}));
- let logFile = 'protractor.log'; // the default log file name
- /**
- * Logger class adds timestamp output, log levels, and identifiers to help
- * when debugging. Also could write to console, file, both, or none.
- */
- class Logger {
- /**
- * Creates a logger instance with an ID for the logger.
- * @constructor
- */
- constructor(id) {
- this.id = id;
- }
- /**
- * Set up the logging configuration from the protractor configuration file.
- * @param config The protractor configuration
- */
- static set(config) {
- if (config.troubleshoot) {
- Logger.logLevel = LogLevel.DEBUG;
- }
- else if (config.logLevel) {
- Logger.logLevel = LogLevel[config.logLevel];
- }
- }
- /**
- * Set up the write location. If writing to a file, get the file descriptor.
- * @param writeTo The enum for where to write the logs.
- * @param opt_logFile An optional parameter to override the log file location.
- */
- static setWrite(writeTo, opt_logFile) {
- if (opt_logFile) {
- logFile = opt_logFile;
- }
- Logger.writeTo = writeTo;
- if (Logger.writeTo == WriteTo.FILE || Logger.writeTo == WriteTo.BOTH) {
- Logger.fd = fs.openSync(path.resolve(logFile), 'a');
- Logger.firstWrite = false;
- }
- }
- /**
- * Log INFO
- * @param ...msgs multiple arguments to be logged.
- */
- info(...msgs) {
- this.log_(LogLevel.INFO, msgs);
- }
- /**
- * Log DEBUG
- * @param ...msgs multiple arguments to be logged.
- */
- debug(...msgs) {
- this.log_(LogLevel.DEBUG, msgs);
- }
- /**
- * Log WARN
- * @param ...msgs multiple arguments to be logged.
- */
- warn(...msgs) {
- this.log_(LogLevel.WARN, msgs);
- }
- /**
- * Log ERROR
- * @param ...msgs multiple arguments to be logged.
- */
- error(...msgs) {
- this.log_(LogLevel.ERROR, msgs);
- }
- /**
- * For the log level set, check to see if the messages should be logged.
- * @param logLevel The log level of the message.
- * @param msgs The messages to be logged
- */
- log_(logLevel, msgs) {
- switch (Logger.logLevel) {
- case LogLevel.ERROR:
- if (logLevel <= LogLevel.ERROR) {
- this.print_(logLevel, msgs);
- }
- break;
- case LogLevel.WARN:
- if (logLevel <= LogLevel.WARN) {
- this.print_(logLevel, msgs);
- }
- break;
- case LogLevel.INFO:
- if (logLevel <= LogLevel.INFO) {
- this.print_(logLevel, msgs);
- }
- break;
- case LogLevel.DEBUG:
- if (logLevel <= LogLevel.DEBUG) {
- this.print_(logLevel, msgs);
- }
- break;
- default:
- throw new Error('Invalid log level');
- }
- }
- /**
- * Format with timestamp, log level, identifier, and message and log to
- * specified medium (console, file, both, none).
- * @param logLevel The log level of the message.
- * @param msgs The messages to be logged.
- */
- print_(logLevel, msgs) {
- let consoleLog = '';
- let fileLog = '';
- if (Logger.showTimestamp) {
- consoleLog += Logger.timestamp_(WriteTo.CONSOLE);
- fileLog += Logger.timestamp_(WriteTo.FILE);
- }
- consoleLog += Logger.level_(logLevel, this.id, WriteTo.CONSOLE);
- fileLog += Logger.level_(logLevel, this.id, WriteTo.FILE);
- if (Logger.showId) {
- consoleLog += Logger.id_(logLevel, this.id, WriteTo.CONSOLE);
- fileLog += Logger.id_(logLevel, this.id, WriteTo.FILE);
- }
- consoleLog += ' -';
- fileLog += ' - ';
- switch (Logger.writeTo) {
- case WriteTo.CONSOLE:
- msgs.unshift(consoleLog);
- console.log.apply(console, msgs);
- break;
- case WriteTo.FILE:
- // for the first line written to the file, add a space
- if (!Logger.firstWrite) {
- fs.writeSync(Logger.fd, '\n');
- Logger.firstWrite = true;
- }
- fileLog += ' ' + Logger.msgToFile_(msgs);
- fs.writeSync(Logger.fd, fileLog + '\n');
- break;
- case WriteTo.BOTH:
- // for the first line written to the file, add a space
- if (!Logger.firstWrite) {
- fs.writeSync(Logger.fd, '\n');
- Logger.firstWrite = true;
- }
- fileLog += ' ' + Logger.msgToFile_(msgs);
- fs.writeSync(Logger.fd, fileLog + '\n');
- msgs.unshift(consoleLog);
- console.log.apply(console, msgs);
- break;
- case WriteTo.NONE:
- break;
- }
- }
- /**
- * Get a timestamp formatted with [hh:mm:ss]
- * @param writeTo The enum for where to write the logs.
- * @return The string of the formatted timestamp
- */
- static timestamp_(writeTo) {
- let d = new Date();
- let ts = '[';
- let hours = d.getHours() < 10 ? '0' + d.getHours() : d.getHours();
- let minutes = d.getMinutes() < 10 ? '0' + d.getMinutes() : d.getMinutes();
- let seconds = d.getSeconds() < 10 ? '0' + d.getSeconds() : d.getSeconds();
- if (writeTo == WriteTo.CONSOLE) {
- ts += printGray(hours + ':' + minutes + ':' + seconds) + ']';
- }
- else {
- ts += hours + ':' + minutes + ':' + seconds + ']';
- }
- ts += ' ';
- return ts;
- }
- /**
- * Get the identifier of the logger as '/<id>'
- * @param logLevel The log level of the message.
- * @param writeTo The enum for where to write the logs.
- * @return The string of the formatted id
- */
- static id_(logLevel, id, writeTo) {
- if (writeTo === WriteTo.FILE) {
- return '/' + id;
- }
- else if (logLevel === LogLevel.ERROR) {
- return printRed('/' + id);
- }
- else if (logLevel === LogLevel.WARN) {
- return printYellow('/' + id);
- }
- else {
- return '/' + id;
- }
- }
- /**
- * Get the log level formatted with the first letter. For info, it is I.
- * @param logLevel The log level of the message.
- * @param writeTo The enum for where to write the logs.
- * @return The string of the formatted log level
- */
- static level_(logLevel, id, writeTo) {
- let level = LogLevel[logLevel].toString();
- if (writeTo === WriteTo.FILE) {
- return level[0];
- }
- else if (logLevel === LogLevel.ERROR) {
- return printRed(level[0]);
- }
- else if (logLevel === LogLevel.WARN) {
- return printYellow(level[0]);
- }
- else {
- return level[0];
- }
- }
- /**
- * Convert the list of messages to a single string message.
- * @param msgs The list of messages.
- * @return The string of the formatted messages
- */
- static msgToFile_(msgs) {
- let log = '';
- for (let pos = 0; pos < msgs.length; pos++) {
- let msg = msgs[pos];
- let ret;
- if (typeof msg === 'object') {
- ret = JSON.stringify(msg);
- }
- else {
- ret = msg;
- }
- if (pos !== msgs.length - 1) {
- ret += ' ';
- }
- log += ret;
- }
- return log;
- }
- }
- Logger.logLevel = LogLevel.INFO;
- Logger.showTimestamp = true;
- Logger.showId = true;
- Logger.writeTo = WriteTo.CONSOLE;
- Logger.firstWrite = false;
- exports.Logger = Logger;
- //# sourceMappingURL=logger.js.map
|