From 1637c2287067ac6e32107506ea291fcb61e1f87f Mon Sep 17 00:00:00 2001 From: Ankur Oberoi Date: Fri, 12 Apr 2019 06:20:56 -0700 Subject: [PATCH] transition from internal logger to @slack/logger --- package.json | 4 +- src/Slapp.ts | 7 +- src/conversation-store.ts | 2 +- src/logger.ts | 165 -------------------------------------- 4 files changed, 5 insertions(+), 173 deletions(-) delete mode 100644 src/logger.ts diff --git a/package.json b/package.json index 5ce2a6cd9..1cc12de75 100644 --- a/package.json +++ b/package.json @@ -33,18 +33,16 @@ "node": ">=8.9.0" }, "dependencies": { + "@slack/logger": "^1.0.0", "@slack/types": "^1.0.0", "@slack/web-api": "^5.0.0", - "@types/chalk": "^2.2.0", "@types/express": "^4.16.1", "@types/node": ">=8", "@types/request": "^2.48.1", "axios": "^0.18.0", - "chalk": "^2.4.2", "deap": "^1.0.0", "express": "^4.16.4", "js-queue": "^1.0.0", - "object.entries": "^1.1.0", "path-to-regexp": "^2.0.0", "querystring": "^0.2.0", "raw-body": "^2.3.3", diff --git a/src/Slapp.ts b/src/Slapp.ts index 46c57cecf..a45a7e8b3 100644 --- a/src/Slapp.ts +++ b/src/Slapp.ts @@ -1,6 +1,7 @@ +import util from 'util'; import { WebClient, ChatPostMessageArguments } from '@slack/web-api'; +import { Logger, LogLevel, ConsoleLogger } from '@slack/logger'; import { ExpressReceiver, Receiver, Event as ReceiverEvent, ReceiverArguments } from './receiver'; -import { Logger, LogLevel, ConsoleLogger } from './logger'; // tslint:disable-line:import-name import { ignoreSelfMiddleware, ignoreBotsMiddleware, @@ -14,7 +15,6 @@ import { matchMessage, } from './middleware/builtin'; import { processMiddleware } from './middleware/process'; -import util from 'util'; import { ConversationStore, conversationContext, MemoryStore } from './conversation-store'; import { Middleware, @@ -133,8 +133,7 @@ export default class Slapp { this.middleware = []; this.listeners = []; - // TODO: should we pass the logLevel through? probably not - this.client = new WebClient(); + this.client = new WebClient(undefined, { logLevel }); // Check for required arguments of ExpressReceiver if (signingSecret !== undefined) { diff --git a/src/conversation-store.ts b/src/conversation-store.ts index 5a5753bf4..77894a621 100644 --- a/src/conversation-store.ts +++ b/src/conversation-store.ts @@ -1,5 +1,5 @@ import { Middleware, AnyMiddlewareArgs } from './types'; -import { Logger } from './logger'; +import { Logger } from '@slack/logger'; import { getTypeAndConversation } from './helpers'; /** diff --git a/src/logger.ts b/src/logger.ts deleted file mode 100644 index 7536b1c8f..000000000 --- a/src/logger.ts +++ /dev/null @@ -1,165 +0,0 @@ -import chalk from 'chalk'; -import objectEntries = require('object.entries'); // tslint:disable-line:no-require-imports - -/** - * Severity levels for log entries - */ -export enum LogLevel { - ERROR = 'error', - WARN = 'warn', - INFO = 'info', - DEBUG = 'debug', -} - -/** - * Interface for objects where objects in this package's logs can be sent (can be used as `logger` option). - */ -export interface Logger { - /** - * Output debug message - * - * @param msg any data to log - */ - debug(...msg: any[]): void; - - /** - * Output info message - * - * @param msg any data to log - */ - info(...msg: any[]): void; - - /** - * Output warn message - * - * @param msg any data to log - */ - warn(...msg: any[]): void; - - /** - * Output error message - * - * @param msg any data to log - */ - error(...msg: any[]): void; - - /** - * This disables all logging below the given level, so that after a log.setLevel("warn") call log.warn("something") - * or log.error("something") will output messages, but log.info("something") will not. - * - * @param level as a string, like 'error' (case-insensitive) - */ - setLevel(level: LogLevel): void; - - /** - * This allows the instance to be named so that they can easily be filtered when many loggers are sending output - * to the same destination. - * - * @param name as a string, will be output with every log after the level - */ - setName(name: string): void; -} - -/** - * Default logger which logs to stdout and stderr - */ -export class ConsoleLogger implements Logger { - /** Setting for level */ - private level: LogLevel; - /** Name */ - private name: string; - /** Map of labels for each log level */ - private static labels: Map = (() => { - const entries = objectEntries(LogLevel) as ([string, LogLevel])[]; - const map = entries.map(([key, value]) => { - return [value, `[${key}] `] as [LogLevel, string]; - }); - return new Map(map); - })(); - /** Map of severity as comparable numbers for each log level */ - private static severity: { [key in LogLevel]: number } = { - [LogLevel.ERROR]: 400, - [LogLevel.WARN]: 300, - [LogLevel.INFO]: 200, - [LogLevel.DEBUG]: 100, - }; - - /** Reference to a function that can be used as console.debug() */ - private debugFn: (message?: any, ...optionalParams: any[]) => void; - - constructor() { - this.level = LogLevel.INFO; - // TODO: do we need a name? - this.name = ''; - chalk.enabled = true; - - // In node < 8.0.0, console.debug does not exist - // TODO: remove this - if (console.debug !== undefined) { - this.debugFn = console.debug; - } else { - this.debugFn = console.log; - } - } - - /** - * Sets the instance's log level so that only messages which are equal or more severe are output to the console. - */ - public setLevel(level: LogLevel): void { - this.level = level; - } - - /** - * Set the instance's name, which will appear on each log line before the message. - */ - public setName(name: string): void { - this.name = name; - } - - /** - * Sets whether color is enabled for logging - */ - public setColor(color: boolean): void { - chalk.enabled = color; - } - - /** - * Log a debug message - */ - public debug(...msg: any[]): void { - if (ConsoleLogger.isMoreOrEqualSevere(LogLevel.DEBUG, this.level)) { - this.debugFn(chalk.cyan((ConsoleLogger.labels.get(LogLevel.DEBUG) as string), this.name, ...msg)); - } - } - /** - * Log an info message - */ - public info(...msg: any[]): void { - if (ConsoleLogger.isMoreOrEqualSevere(LogLevel.INFO, this.level)) { - console.info(ConsoleLogger.labels.get(LogLevel.INFO), this.name, ...msg); - } - } - /** - * Log a warning message - */ - public warn(...msg: any[]): void { - if (ConsoleLogger.isMoreOrEqualSevere(LogLevel.WARN, this.level)) { - console.warn(chalk.yellow(ConsoleLogger.labels.get(LogLevel.WARN) as string), this.name, ...msg); - } - } - /** - * Log an error message - */ - public error(...msg: any[]): void { - if (ConsoleLogger.isMoreOrEqualSevere(LogLevel.ERROR, this.level)) { - console.error(chalk.red(ConsoleLogger.labels.get(LogLevel.ERROR) as string), this.name, ...msg); - } - } - - /** - * Helper to compare two log levels and determine if a is equal or more severe than b - */ - private static isMoreOrEqualSevere(a: LogLevel, b: LogLevel): boolean { - return ConsoleLogger.severity[a] >= ConsoleLogger.severity[b]; - } -}