Skip to content

Commit 6d271ef

Browse files
authored
feat: refactor codesmith logger (#154)
* feat: refactor logger printing timing * feat: use debug package to logger * feat: format debug info * feat: format warn info * feat: format error logger * fix: detail * feat: support time option * docs: changeset * fix: typo * fix: lint error * fix: log * feat: add icon * feat: time log
1 parent 28464e2 commit 6d271ef

File tree

18 files changed

+223
-153
lines changed

18 files changed

+223
-153
lines changed

.changeset/khaki-readers-fix.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
---
2+
"@modern-js/codesmith-api-handlebars": minor
3+
"@modern-js/codesmith-api-json": minor
4+
"@modern-js/codesmith-api-app": minor
5+
"@modern-js/codesmith-api-ejs": minor
6+
"@modern-js/codesmith-api-git": minor
7+
"@modern-js/codesmith-api-fs": minor
8+
"@modern-js/codesmith": minor
9+
"@modern-js/codesmith-cli": minor
10+
---
11+
12+
feat: refactor codesmith logger
13+
14+
feat: 重构 codesmith 日志模块

packages/api/app/src/index.ts

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,9 @@ export class AppAPI {
5353
}
5454

5555
public async checkEnvironment(nodeVersion?: string) {
56-
if (semver.lt(process.versions.node, nodeVersion || '12.22.12')) {
56+
if (semver.lt(process.versions.node, nodeVersion || '16.20.2')) {
5757
this.generatorCore.logger.warn(
58-
i18n.t(localeKeys.environment.node_version),
58+
`🟡 ${i18n.t(localeKeys.environment.node_version)}`,
5959
);
6060
return false;
6161
}
@@ -64,9 +64,11 @@ export class AppAPI {
6464
!(await canUsePnpm()) &&
6565
!(await canUseNpm())
6666
) {
67-
this.generatorCore.logger.debug("can't use yarn or pnpm or npm");
67+
this.generatorCore.logger.debug(
68+
"🧐 [Check Environment] Can't use yarn or pnpm or npm",
69+
);
6870
this.generatorCore.logger.warn(
69-
i18n.t(localeKeys.environment.yarn_pnpm_npm),
71+
`🟡 ${i18n.t(localeKeys.environment.yarn_pnpm_npm)}`,
7072
);
7173
return false;
7274
}
@@ -118,9 +120,9 @@ export class AppAPI {
118120
} catch (e) {
119121
this.generatorCore.logger.warn(e);
120122
this.generatorCore.logger.warn(
121-
i18n.t(localeKeys.install.failed, {
123+
`🟡 ${i18n.t(localeKeys.install.failed, {
122124
command: command || `${packageManager} install`,
123-
}),
125+
})}`,
124126
);
125127
}
126128
}
@@ -149,9 +151,9 @@ export class AppAPI {
149151
await this.runInstall();
150152
}
151153
} catch (e) {
152-
this.generatorCore.logger.debug('Dependencies install failed', e);
154+
this.generatorCore.logger.debug('❗️ [Run Install Failed]:', e);
153155
this.generatorCore.logger.warn(
154-
i18n.t(localeKeys.install.failed_no_command),
156+
`🟡 ${i18n.t(localeKeys.install.failed_no_command)}`,
155157
);
156158
}
157159

@@ -161,8 +163,8 @@ export class AppAPI {
161163
this.generatorCore.logger.info(i18n.t(localeKeys.git.success));
162164
}
163165
} catch (e) {
164-
this.generatorCore.logger.debug('Git repository create failed', e);
165-
this.generatorCore.logger.warn(i18n.t(localeKeys.git.failed));
166+
this.generatorCore.logger.debug('❗️ [Git Add and Commit Failed]:', e);
167+
this.generatorCore.logger.warn(`🟡 ${i18n.t(localeKeys.git.failed)}`);
166168
}
167169
}
168170

@@ -174,7 +176,7 @@ export class AppAPI {
174176
type: 'handlebars' | 'ejs' = 'handlebars',
175177
) {
176178
try {
177-
this.generatorCore.logger?.timing?.('forgeTemplate');
179+
this.generatorCore.logger?.timing?.('🕒 ForgeTemplate');
178180
const { material } = this.generatorContext.current!;
179181
const resourceMap = await material.find(templatePattern, {
180182
nodir: true,
@@ -187,7 +189,7 @@ export class AppAPI {
187189
.filter(resourceKey => (filter ? filter(resourceKey) : true))
188190
.map(async resourceKey => {
189191
this.generatorCore.logger.debug(
190-
`[renderDir] resourceKey=${resourceKey}`,
192+
`💡 [Forge Template]: resourceKey=${resourceKey}`,
191193
);
192194
const target = rename
193195
? rename(resourceKey)
@@ -203,11 +205,13 @@ export class AppAPI {
203205
);
204206
}
205207
} catch (e) {
206-
this.generatorCore.logger.debug('base forging failed:', e);
207-
this.generatorCore.logger.warn(i18n.t(localeKeys.templated.failed));
208-
throw new Error('base forging failed');
208+
this.generatorCore.logger.debug('❗️ [Forge Template Failed]:', e);
209+
this.generatorCore.logger.warn(
210+
`🟡 ${i18n.t(localeKeys.templated.failed)}`,
211+
);
212+
throw new Error('Forge Template Failed');
209213
} finally {
210-
this.generatorCore.logger?.timing?.('forgeTemplate', true);
214+
this.generatorCore.logger?.timing?.('🕒 ForgeTemplate', true);
211215
}
212216
}
213217

@@ -218,7 +222,7 @@ export class AppAPI {
218222
parameters?: Record<string, any>,
219223
) {
220224
try {
221-
this.generatorCore.logger?.timing?.('renderTemplateByFileType');
225+
this.generatorCore.logger?.timing?.('🕒 RenderTemplateByFileType');
222226
const { material } = this.generatorContext.current!;
223227
const resourceMap = await material.find(templatePattern, {
224228
nodir: true,
@@ -230,7 +234,7 @@ export class AppAPI {
230234
.filter(resourceKey => (filter ? filter(resourceKey) : true))
231235
.map(async resourceKey => {
232236
this.generatorCore.logger.debug(
233-
`[renderDir] resourceKey=${resourceKey}`,
237+
`💡 [Forge Template by Type]: resourceKey=${resourceKey}`,
234238
);
235239
if (resourceKey.includes('.handlebars')) {
236240
const target = rename
@@ -268,11 +272,13 @@ export class AppAPI {
268272
);
269273
}
270274
} catch (e) {
271-
this.generatorCore.logger.debug('base forging failed:', e);
272-
this.generatorCore.logger.warn(i18n.t(localeKeys.templated.failed));
273-
throw new Error('base forging failed');
275+
this.generatorCore.logger.debug('❗️ [Forge Template by Type Failed]:', e);
276+
this.generatorCore.logger.warn(
277+
`🟡 ${i18n.t(localeKeys.templated.failed)}`,
278+
);
279+
throw new Error('Forge Template by Type Failed');
274280
} finally {
275-
this.generatorCore.logger?.timing?.('renderTemplateByFileType', true);
281+
this.generatorCore.logger?.timing?.('🕒 RenderTemplateByFileType', true);
276282
}
277283
}
278284

@@ -317,8 +323,14 @@ export class AppAPI {
317323
config,
318324
);
319325
} catch (e) {
320-
this.generatorCore.logger.warn(i18n.t(localeKeys.generator.failed));
321-
this.generatorCore.logger.debug(i18n.t(localeKeys.generator.failed), e);
326+
this.generatorCore.logger.warn(
327+
`🟡 ${i18n.t(localeKeys.generator.failed)}`,
328+
);
329+
this.generatorCore.logger.debug(
330+
'❗️ [Runtime sub Generator Failed]:',
331+
subGenerator,
332+
e,
333+
);
322334
throw new Error('run sub generator failed');
323335
}
324336
}

packages/api/app/src/utils/checkUseNvm.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export async function checkUseNvm(cwd: string, logger: ILogger) {
4141
// check nvm exist
4242
if (!(await canUseNvm())) {
4343
logger.warn(
44-
`current node version is not expect, you should install ${expectNodeVersion}`,
44+
`🟡 [Check nvm Error]: Current node version is not expect, you should install ${expectNodeVersion}`,
4545
);
4646
return false;
4747
}

packages/api/ejs/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ export class EjsAPI {
6161
// resourceKey is relate path. example: in `garr-master/package.json`, package.json is resourceKey
6262
Object.keys(resourceMap).map(async resourceKey => {
6363
this.generatorCore.logger.debug(
64-
`[renderDir] resourceKey=${resourceKey}`,
64+
`💡 [EJS Render Template Dir]: resourceKey=${resourceKey}`,
6565
);
6666
await this.renderTemplate(
6767
material.get(resourceKey),

packages/api/fs/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export class FsAPI {
4747
await Promise.all(
4848
Object.keys(resourceMap).map(async resourceKey => {
4949
this.generatorCore.logger.debug(
50-
`[renderDir] resourceKey=${resourceKey}`,
50+
`💡 [FS Render Dir]: resourceKey=${resourceKey}`,
5151
);
5252
await this.renderFile(material.get(resourceKey), target(resourceKey));
5353
}),

packages/api/git/src/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export class GitAPI {
3535
}
3636
const alreadyInit = await this.isInGitRepo(cwd);
3737
if (alreadyInit && !force) {
38-
this.generatorCore.logger.debug('already in a git repo, skip init');
38+
this.generatorCore.logger.debug('❗️ [Git Init]: Already init, Skip');
3939
return;
4040
}
4141
try {
@@ -44,7 +44,7 @@ export class GitAPI {
4444
} = this.generatorContext || { config: { defaultBranch: 'master' } };
4545
await initGitRepo(cwd, defaultBranch);
4646
} catch (e) {
47-
this.generatorCore.logger.debug('[GitAPI.error]:', e);
47+
this.generatorCore.logger.debug('❗️ [Git Init Error]:', e);
4848
throw e;
4949
}
5050
}
@@ -61,7 +61,7 @@ export class GitAPI {
6161
await gitAdd(cwd);
6262
await gitCommit(cwd, commitMessage);
6363
} catch (e) {
64-
this.generatorCore.logger.debug('[GitAPI.error]:', e);
64+
this.generatorCore.logger.debug('❗️ [Git Add and Commit Error]:', e);
6565
throw e;
6666
}
6767
}

packages/api/handlebars/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ export class HandlebarsAPI {
9090
// resourceKey is relate path. example: in `garr-master/package.json`, package.json is resourceKey
9191
Object.keys(resourceMap).map(async resourceKey => {
9292
this.generatorCore.logger.debug(
93-
`[renderDir] resourceKey=${resourceKey}`,
93+
`💡 [Handlebars Render Template Dir]: resourceKey=${resourceKey}`,
9494
);
9595
await this.renderTemplate(
9696
material.get(resourceKey),

packages/api/json/src/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export class JsonAPI {
1616
const origin = commentJSON.parse(originJsonValue.content as string);
1717
return origin;
1818
} catch (e) {
19-
this.generatorCore.logger.debug('[JSON API] parse json error:', e);
19+
this.generatorCore.logger.debug('❗️ [JSON Get Parse Error]:', e);
2020
throw new Error('resource content is not a legal json');
2121
}
2222
}
@@ -37,7 +37,7 @@ export class JsonAPI {
3737
(endWithNewLine ? '\n' : '')
3838
);
3939
} catch (e) {
40-
this.generatorCore.logger.debug('[JSON API] parse json error:', e);
40+
this.generatorCore.logger.debug('❗️ [JSON Extend Parse Error]:', e);
4141
throw new Error('resource content is not a legal json');
4242
}
4343
});
@@ -58,7 +58,7 @@ export class JsonAPI {
5858
(endWithNewLine ? '\n' : ''),
5959
);
6060
} catch (e) {
61-
this.generatorCore.logger.debug('[JSON API] parse json error:', e);
61+
this.generatorCore.logger.debug('❗️ [JSON Update Parse Error]:', e);
6262
throw new Error('resource content is not a legal json');
6363
}
6464
});

packages/cli/src/actions/genAction.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,39 +4,42 @@ import { getLocalLanguage } from '../utils';
44

55
interface LocalOptions {
66
debug?: boolean;
7+
time?: boolean;
78
config: string;
89
registry?: string;
910
pwd?: string;
1011
}
1112

1213
export async function genAction(generator: string, genOptions: LocalOptions) {
13-
const { debug, config, registry, pwd } = genOptions;
14+
const { debug, time, config, registry, pwd } = genOptions;
1415
const smith = new CodeSmith({
1516
debug,
17+
time,
1618
registryUrl: registry,
1719
});
1820

19-
smith.logger.debug('generator', generator);
20-
smith.logger.debug('genOptions.debug', debug);
21-
smith.logger.debug('genOptions.pwd', pwd);
22-
smith.logger.debug('genOptions.config', config);
21+
smith.logger.debug('💡 [Runtime Gen Action]');
22+
smith.logger.debug('💡 [Generator Name]:', generator);
23+
smith.logger.debug('💡 [Generator Pwd]:', pwd);
24+
smith.logger.debug('💡 [Generator Debug]:', debug);
25+
smith.logger.debug('💡 [Generator Options]:', config);
2326

2427
let runPwd = process.cwd();
2528
if (pwd) {
2629
if (path.isAbsolute(pwd)) {
2730
runPwd = pwd;
28-
smith.logger.debug('genOptions.pwd is absolute path', pwd);
31+
smith.logger.debug('💡 [PWD is Absolute Path]:', pwd);
2932
} else {
3033
runPwd = path.join(process.cwd(), pwd);
31-
smith.logger.debug('genOptions.pwd is relative path', pwd);
34+
smith.logger.debug('💡 [PWD is Relative Path]:', pwd);
3235
}
3336
}
3437

3538
let targetConfig: Record<string, unknown> = {};
3639
try {
3740
targetConfig = JSON.parse(config);
3841
} catch (e) {
39-
smith.logger.error('Bad json for config: ', genOptions.config);
42+
smith.logger.error('🔴 [Config Parse Error]:', e);
4043
return;
4144
}
4245

packages/cli/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export default function () {
88
.command('gen <generator>', { isDefault: true })
99
.description('use csmith to generator something')
1010
.option('-d,--debug', 'using debug mode to log something', false)
11+
.option('--time', 'show time logger', false)
1112
.option('-p,--pwd <pwd>', 'process working directory', process.cwd())
1213
.option('--config <config>', 'config for this generator(json string)', '{}')
1314
.option(

0 commit comments

Comments
 (0)