From d3d9a1b99ff3fb0ceb12d03efb8a99aa6e03f84b Mon Sep 17 00:00:00 2001 From: Yiming Li Date: Sun, 31 Oct 2021 00:31:00 +0800 Subject: [PATCH] :sparkles: Feature(log): add log level type and export default logPath and logLevel --- src/index.ts | 16 ++++++++-------- src/lib/Logger.ts | 19 +++++++++++++------ src/types/index.ts | 3 ++- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/index.ts b/src/index.ts index 3f5ee00..4fb6c62 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,11 +1,11 @@ -export { PicGo } from './core/PicGo' -export { Lifecycle } from './core/Lifecycle' +export * from './core/PicGo' +export * from './core/Lifecycle' -export { Logger } from './lib/Logger' -export { PluginHandler } from './lib/PluginHandler' -export { LifecyclePlugins } from './lib/LifecyclePlugins' -export { Commander } from './lib/Commander' -export { PluginLoader } from './lib/PluginLoader' -export { Request } from './lib/Request' +export * from './lib/Logger' +export * from './lib/PluginHandler' +export * from './lib/LifecyclePlugins' +export * from './lib/Commander' +export * from './lib/PluginLoader' +export * from './lib/Request' export * from './types' diff --git a/src/lib/Logger.ts b/src/lib/Logger.ts index 9f8ee9e..7e26a65 100644 --- a/src/lib/Logger.ts +++ b/src/lib/Logger.ts @@ -13,6 +13,9 @@ import { IPicGo } from '../types' +// Convert enum into union, see: https://stackoverflow.com/a/52396706 +export type LogLevel = `${ILogType}` | 'all' + export class Logger implements ILogger { private readonly level = { [ILogType.success]: 'green', @@ -22,19 +25,23 @@ export class Logger implements ILogger { } private readonly ctx: IPicGo - private logLevel!: string - private logPath!: string constructor (ctx: IPicGo) { this.ctx = ctx } + get logPath (): string { + return this.ctx.getConfig>('settings.logPath') || path.join(this.ctx.baseDir, './picgo.log') + } + + get logLevel (): LogLevel | LogLevel[] { + return this.ctx.getConfig>('settings.logLevel') ?? 'all' + } + private handleLog (type: ILogType, ...msg: ILogArgvTypeWithError[]): void { // check config.silent if (!this.ctx.getConfig>('silent')) { const logHeader = chalk[this.level[type] as ILogColor](`[PicGo ${type.toUpperCase()}]:`) console.log(logHeader, ...msg) - this.logLevel = this.ctx.getConfig('settings.logLevel') - this.logPath = this.ctx.getConfig>('settings.logPath') || path.join(this.ctx.baseDir, './picgo.log') setTimeout(() => { this.handleWriteLog(this.logPath, type, ...msg) }, 0) @@ -64,12 +71,12 @@ export class Logger implements ILogger { } } - private checkLogLevel (type: string, level: undefined | string | string[]): boolean { + private checkLogLevel (type: string, level?: LogLevel | LogLevel[]): boolean { if (level === undefined || level === 'all') { return true } if (Array.isArray(level)) { - return level.some((item: string) => (item === type || item === 'all')) + return level.some((item) => (item === type || item === 'all')) } else { return type === level } diff --git a/src/types/index.ts b/src/types/index.ts index 16564f5..6d0de70 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,6 +1,7 @@ import { RequestPromiseAPI } from 'request-promise-native' import { Command } from 'commander' import { Inquirer } from 'inquirer' +import { LogLevel } from '..' export interface IPicGo extends NodeJS.EventEmitter { /** @@ -298,7 +299,7 @@ export interface IConfig { debug?: boolean silent?: boolean settings?: { - logLevel?: string + logLevel?: LogLevel | LogLevel[] logPath?: string /** for npm */ registry?: string