diff --git a/packages/cli/index.ts b/packages/cli/index.ts index 94b2f34848..3e033c097a 100755 --- a/packages/cli/index.ts +++ b/packages/cli/index.ts @@ -27,7 +27,10 @@ function printHeader() { } program - .hook('preAction', () => preFlightChecks()); + .hook('preAction', () => { + logger.initializeFileLogging(); + preFlightChecks(); + }); program .addHelpText('beforeAll', printHeader()) diff --git a/packages/cli/src/util/logger.ts b/packages/cli/src/util/logger.ts index 4c6f2ea004..28d69eb1f0 100644 --- a/packages/cli/src/util/logger.ts +++ b/packages/cli/src/util/logger.ts @@ -34,7 +34,7 @@ function useVerboseConsole(): void { consoleTransport.level = 'verbose'; } -const dailyRotateFileTransport = new DailyRotateFile({ +const dailyRotateFileTransportOptions: DailyRotateFile.DailyRotateFileTransportOptions = { format: fileFormat, datePattern: 'YYYY-MM-DD', dirname: '_markbind/logs', @@ -43,15 +43,24 @@ const dailyRotateFileTransport = new DailyRotateFile({ level: 'debug', maxFiles: 5, auditFile: '_markbind/logs/audit.json', -}); +}; + +let isFileLoggingInitialized = false; + +function initializeFileLogging(): void { + if (isFileLoggingInitialized) { + return; + } + + winston.add(new DailyRotateFile(dailyRotateFileTransportOptions)); + isFileLoggingInitialized = true; +} -// Reconfigure the default instance logger winston provides with DailyRotateFile for markbind-cli +// Reconfigure the default instance logger winston provides for markbind-cli. +// File logging is added only when a command is about to run. winston.configure({ exitOnError: false, - transports: [ - consoleTransport, - dailyRotateFileTransport, - ], + transports: [consoleTransport], }); export { @@ -65,6 +74,7 @@ export { export { useDebugConsole, useVerboseConsole, + initializeFileLogging, }; // eslint-disable-next-line no-console diff --git a/packages/cli/test/unit/index.test.ts b/packages/cli/test/unit/index.test.ts new file mode 100644 index 0000000000..05dd37ef78 --- /dev/null +++ b/packages/cli/test/unit/index.test.ts @@ -0,0 +1,15 @@ +import fs from 'fs-extra'; +import os from 'os'; +import path from 'path'; +import { spawnSync } from 'child_process'; + +test('running MarkBind without a command does not create log files', () => { + const workingDirectory = fs.mkdtempSync(path.join(os.tmpdir(), 'markbind-cli-')); + const cliPath = path.resolve(__dirname, '../../dist/index.js'); + + const result = spawnSync(process.execPath, [cliPath], { cwd: workingDirectory }); + + expect(result.status).toBe(1); + expect(fs.existsSync(path.join(workingDirectory, '_markbind'))).toBe(false); + fs.removeSync(workingDirectory); +});