Skip to content

Commit 0d0e191

Browse files
committed
optimize logger module
1 parent 31eaecc commit 0d0e191

15 files changed

Lines changed: 108 additions & 77 deletions

src/CodeBuilder.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -496,7 +496,7 @@ export abstract class CodeBuilder {
496496
builderOptions.options.afterBuildTasks = [command].concat(builderOptions.options.afterBuildTasks);
497497
} catch (error) {
498498
GlobalEvent.emit('msg', newMessage('Warning', `Generating '${mkfile_path}' failed !`));
499-
GlobalEvent.emit('globalLog', ExceptionToMessage(error, 'Error'));
499+
GlobalEvent.log_error(error);
500500
}
501501
}
502502

src/DependenceManager.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ export class DependenceManager implements ManagerInterface {
6565
}
6666

6767
InstallComponent(packName: string, component: Component) {
68-
GlobalEvent.emit('globalLog.append', `[Info] Install CMSIS Component: ${component.groupName}\n`);
68+
GlobalEvent.log_info(`Install CMSIS Component: ${component.groupName} ...`);
6969
this._installComponent(packName, component, [component.groupName]);
70-
GlobalEvent.emit('globalLog.append', `[Info] Done.\n`);
70+
GlobalEvent.log_info(`Done.`);
7171
}
7272

7373
private _installComponent(packName: string, component: Component, pendingList: string[]) {
@@ -84,13 +84,13 @@ export class DependenceManager implements ManagerInterface {
8484
try {
8585
depList= packageManager.checkComponentRequirement(component.condition, toolchain);
8686
} catch (error) {
87-
GlobalEvent.emit('globalLog.append', `[Warn] ${(<Error>error).message}\n`);
87+
GlobalEvent.log_warn(`${(<Error>error).message}`);
8888
throw new Error(`Condition '${component.condition}' is not fit for this component: '${component.groupName}'`);
8989
}
9090
// try install dependences
9191
for (const fullname of depList) {
9292
if (!fullname.startsWith('Device.')) {
93-
GlobalEvent.emit('globalLog.append', `[Warn] ${' '.repeat(pendingList.length)}Skip component: '${fullname}'\n`);
93+
GlobalEvent.log_warn(`${' '.repeat(pendingList.length)}-> ignore component: '${fullname}'`);
9494
continue; /* 排除非 Device 类型的组件 */
9595
}
9696
const reqName = fullname.replace('Device.', '');
@@ -102,7 +102,7 @@ export class DependenceManager implements ManagerInterface {
102102
if (pendingList.includes(item.groupName))
103103
continue; /* 排除队列中已存在的 */
104104
pendingList.push(item.groupName);
105-
GlobalEvent.emit('globalLog.append', `[Info] ${' '.repeat(pendingList.length)}-> install dependence component: ${item.groupName}\n`);
105+
GlobalEvent.log_info(`${' '.repeat(pendingList.length)}-> install dependence component: ${item.groupName}`);
106106
this._installComponent(packName, item, pendingList);
107107
pendingList.pop();
108108
}

src/EIDEProject.ts

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,7 @@ class SourceRootList implements SourceProvider {
443443
private _add(dir: File): SourceRootInfo {
444444
const key: string = this.project.toRelativePath(dir.path);
445445
const watcher = platform.createSafetyFileWatcher(dir, true);
446-
watcher.on('error', (err) => GlobalEvent.emit('globalLog', ExceptionToMessage(err, 'Warning')));
446+
watcher.on('error', (err) => GlobalEvent.log_warn(err));
447447
const sourceInfo = this.newSourceInfo(key, watcher);
448448
this.srcFolderMaps.set(key, sourceInfo);
449449
return sourceInfo;
@@ -760,7 +760,7 @@ class SourceRootList implements SourceProvider {
760760

761761
} catch (error) {
762762
rootFolderInfo.needUpdate = true; // set need update flag
763-
GlobalEvent.emit('globalLog', ExceptionToMessage(error, 'Warning'));
763+
GlobalEvent.log_warn(error);
764764
}
765765
}
766766
}
@@ -883,7 +883,7 @@ export abstract class AbstractProject implements CustomConfigurationProvider, Pr
883883
// suffix = model['groups']['linker']['$outputSuffix'];
884884
// }
885885
// } catch (error) {
886-
// GlobalEvent.emit('globalLog', ExceptionToMessage(error, 'Error'));
886+
// GlobalEvent.log_error(error);
887887
// }
888888
// return this.getExecutablePathWithoutSuffix() + suffix;
889889
}
@@ -1701,7 +1701,7 @@ export abstract class AbstractProject implements CustomConfigurationProvider, Pr
17011701
const rePath = this.ToRelativePath(outDir.path) || outDir.path;
17021702

17031703
if (outDir.IsDir()) {
1704-
GlobalEvent.emit('globalLog', newMessage('Warning', `'${rePath}' directory is already exists !, Aborted !`));
1704+
GlobalEvent.log_warn(`'${rePath}' directory is already exists !, Aborted !`);
17051705
continue;
17061706
}
17071707

@@ -1852,7 +1852,7 @@ export abstract class AbstractProject implements CustomConfigurationProvider, Pr
18521852
cfg = yaml.parse(fcfg.Read());
18531853
} catch (error) {
18541854
GlobalEvent.emit('msg', newMessage('Warning', `Parse '${fcfg.name}' failed !`));
1855-
GlobalEvent.emit('globalLog', ExceptionToMessage(error, 'Error'));
1855+
GlobalEvent.log_error(error);
18561856
GlobalEvent.emit('globalLog.show');
18571857
return undefined;
18581858
}
@@ -1897,7 +1897,7 @@ export abstract class AbstractProject implements CustomConfigurationProvider, Pr
18971897
}
18981898
CC_OBJ_SUFFIX = mcc['$outputSuffix'] || '.o';
18991899
} catch (error) {
1900-
GlobalEvent.emit('globalLog', ExceptionToMessage(error, 'Error'));
1900+
GlobalEvent.log_error(error);
19011901
return undefined;
19021902
}
19031903

@@ -2168,7 +2168,7 @@ $(OUT_DIR):
21682168
if (optsObj.options[targetName] == undefined) optsObj.options[targetName] = {};
21692169
return optsObj.options[targetName];
21702170
} catch (error) {
2171-
GlobalEvent.emit('globalLog', ExceptionToMessage(error, 'Error'));
2171+
GlobalEvent.log_error(error);
21722172
}
21732173
}
21742174

@@ -2180,7 +2180,7 @@ $(OUT_DIR):
21802180
optsObj.options[targetName || this.getCurrentTarget()] = cfg;
21812181
optFile.Write(view_str$prompt$filesOptionsComment + yaml.stringify(optsObj, { indent: 4 }));
21822182
} catch (error) {
2183-
GlobalEvent.emit('globalLog', ExceptionToMessage(error, 'Error'));
2183+
GlobalEvent.log_error(error);
21842184
}
21852185
}
21862186

@@ -2678,8 +2678,7 @@ $(OUT_DIR):
26782678
const fileOptions = yaml.parse(file.Read());
26792679
allFileOptions.push({ targetName: allTargets[idx], fileOptions: fileOptions });
26802680
} else {
2681-
GlobalEvent.emit('globalLog.append',
2682-
`[Warn] This options file ".eide/${file.name}" not match any target. remove it !\n`);
2681+
GlobalEvent.log_warn(`This options file ".eide/${file.name}" not match any target. remove it !`);
26832682
}
26842683
try { fs.unlinkSync(file.path) } catch {} // delete file
26852684
}
@@ -2858,7 +2857,7 @@ class EIDEProject extends AbstractProject {
28582857
try {
28592858
this.dependenceManager.InstallComponent(packInfo.name, comp);
28602859
} catch (error) {
2861-
GlobalEvent.emit('globalLog', ExceptionToMessage(error, 'Warning'));
2860+
GlobalEvent.log_warn(error);
28622861
}
28632862
}
28642863
}
@@ -3061,8 +3060,7 @@ class EIDEProject extends AbstractProject {
30613060
let command = cmd_item.command.replace('-co', '-sm -co');
30623061
child_process.exec(command, { cwd: cmd_item.directory }, (error: child_process.ExecException | null, stdout: string, stderr: string) => {
30633062
if (error) {
3064-
const msg = `Failed to make '${deppath}', msg: ${(<Error>error).message}`;
3065-
GlobalEvent.emit('globalLog', newMessage('Warning', msg));
3063+
GlobalEvent.log_warn(`Failed to make '${deppath}', msg: ${(<Error>error).message}`);
30663064
try { fs.unlinkSync(deppath) } catch (error) { } // del old .d file
30673065
resolve();
30683066
} else {
@@ -3075,7 +3073,7 @@ class EIDEProject extends AbstractProject {
30753073
}
30763074
}
30773075
} catch (error) {
3078-
GlobalEvent.emit('globalLog', ExceptionToMessage(error, 'Warning'));
3076+
GlobalEvent.log_warn(error);
30793077
}
30803078

30813079
const toolName = toolchain_ || this.getToolchain().name;
@@ -3097,7 +3095,7 @@ class EIDEProject extends AbstractProject {
30973095
this.srcRefMap.set(srcpath, refs.map((path) => new File(path)));
30983096
}
30993097
} catch (error) {
3100-
GlobalEvent.emit('globalLog', ExceptionToMessage(error, 'Warning'));
3098+
GlobalEvent.log_warn(error);
31013099
}
31023100

31033101
// notify update src view
@@ -3344,7 +3342,7 @@ class EIDEProject extends AbstractProject {
33443342

33453343
proc.on('line', (line) => GlobalEvent.emit('globalLog.append', line + os.EOL));
33463344
proc.on('errLine', (line) => GlobalEvent.emit('globalLog.append', line + os.EOL));
3347-
proc.on('error', (err) => GlobalEvent.emit('globalLog', ExceptionToMessage(err)));
3345+
proc.on('error', (err) => GlobalEvent.log_error(err));
33483346

33493347
proc.on('close', (exitInf) => {
33503348
GlobalEvent.emit('globalLog.append', os.EOL + `process exited, exitCode: ${exitInf.code}` + os.EOL)
@@ -3356,7 +3354,7 @@ class EIDEProject extends AbstractProject {
33563354
});
33573355

33583356
} catch (error) {
3359-
GlobalEvent.emit('globalLog', ExceptionToMessage(error));
3357+
GlobalEvent.log_error(error)
33603358
GlobalEvent.emit('globalLog.show');
33613359
}
33623360

@@ -3624,7 +3622,7 @@ class EIDEProject extends AbstractProject {
36243622
try {
36253623
platform.DeleteDir(_d);
36263624
} catch (error) {
3627-
GlobalEvent.emit('globalLog', ExceptionToMessage(error));
3625+
GlobalEvent.log_error(error);
36283626
}
36293627
}
36303628
}

src/EIDEProjectExplorer.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2215,7 +2215,7 @@ class ProjectDataProvider implements vscode.TreeDataProvider<ProjTreeItem>, vsco
22152215
eideProjInfo = jsonc.parse(eideConfigFile.Read());
22162216
} catch (error) {
22172217
GlobalEvent.emit('msg', newMessage('Warning', `Load '${eideConfigFile.path}' failed !`));
2218-
GlobalEvent.emit('globalLog', ExceptionToMessage(error, 'Error'));
2218+
GlobalEvent.log_error(error);
22192219
}
22202220

22212221
const existedPrjIdx = this.prjList.findIndex((prj) => prj.getWsPath() == workspaceFilePath || prj.getUid() == eideProjInfo.miscInfo.uid);
@@ -2232,7 +2232,7 @@ class ProjectDataProvider implements vscode.TreeDataProvider<ProjTreeItem>, vsco
22322232
return prj;
22332233
} catch (err) {
22342234
GlobalEvent.emit('msg', newMessage('Warning', project_load_failed));
2235-
GlobalEvent.emit('globalLog', ExceptionToMessage(err, 'Error'));
2235+
GlobalEvent.log_error(err);
22362236
GlobalEvent.emit('globalLog.show');
22372237
return undefined;
22382238
}
@@ -3694,14 +3694,14 @@ export class ProjectExplorer implements CustomConfigurationProvider {
36943694
if (extension) {
36953695
if (!extension.isActive) {
36963696
try {
3697-
GlobalEvent.emit('globalLog', newMessage('Info', `Active extension: '${cpptoolsId}'`));
3697+
GlobalEvent.log_info(`Active extension: '${cpptoolsId}'`);
36983698
await extension.activate();
36993699
} catch (error) {
3700-
GlobalEvent.emit('globalLog', ExceptionToMessage(error, 'Warning'));
3700+
GlobalEvent.log_warn(error);
37013701
}
37023702
}
37033703
} else {
3704-
GlobalEvent.emit('globalLog', newMessage('Warning', `The extension '${cpptoolsId}' is not enabled or installed !`));
3704+
GlobalEvent.log_warn(`The extension '${cpptoolsId}' is not enabled or installed !`);
37053705
}
37063706
}
37073707

@@ -3904,7 +3904,7 @@ export class ProjectExplorer implements CustomConfigurationProvider {
39043904
}
39053905
fclangd.Write(yaml.stringify(cfg));
39063906
} catch (error) {
3907-
GlobalEvent.emit('globalLog', ExceptionToMessage(error, 'Error'));
3907+
GlobalEvent.log_error(error);
39083908
}
39093909
}
39103910

@@ -4353,7 +4353,7 @@ export class ProjectExplorer implements CustomConfigurationProvider {
43534353
}
43544354

43554355
} catch (error) {
4356-
GlobalEvent.emit('globalLog', ExceptionToMessage(error, 'Warning'));
4356+
GlobalEvent.log_warn(error);
43574357
}
43584358

43594359
if (diag_res) {
@@ -6971,7 +6971,7 @@ export class ProjectExplorer implements CustomConfigurationProvider {
69716971
installDir.CreateDir(true);
69726972
const szip = new SevenZipper();
69736973
const r = szip.UnzipSync(new File(tmpPath), installDir);
6974-
GlobalEvent.emit('globalLog', newMessage('Info', r));
6974+
GlobalEvent.log_info(r);
69756975

69766976
isFirstInstall = true;
69776977
}

src/EIDEProjectModules.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,7 @@ export abstract class CompileConfigModel<T> extends ConfigModel<T> {
473473
const _targetName = targetName || this.prjConfigData.mode;
474474
const _toolchain = toolchainName || this.prjConfigData.toolchain;
475475
if (this.prjConfigData.targets[_targetName] == undefined) {
476-
GlobalEvent.emit('globalLog.append', `[Warn] target '${_targetName}' not exist !\n`);
476+
GlobalEvent.log_warn(`target '${_targetName}' not exist !`);
477477
GlobalEvent.emit('globalLog.show');
478478
return;
479479
}

src/EIDETypeDefine.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,7 @@ export abstract class Configuration<ConfigType = any, EventType = any> {
402402
try {
403403
if (this.cfgFile.IsExist()) oldContent = this.cfgFile.Read();
404404
} catch (error) {
405-
GlobalEvent.emit('globalLog', ExceptionToMessage(error, 'Warning'));
405+
GlobalEvent.log_error(error);
406406
}
407407

408408
// ! 注意这里比较两个 json 字符串是否相等,需要去除空白字符,不要直接比较字符串,
@@ -1335,7 +1335,7 @@ export class ProjectConfiguration<T extends BuilderConfigData>
13351335
try {
13361336
return JSON.parse(f.Read());
13371337
} catch (error) {
1338-
GlobalEvent.emit('globalLog', ExceptionToMessage(error, 'Error'));
1338+
GlobalEvent.log_error(error);
13391339
return {}; // empty obj
13401340
}
13411341
}
@@ -1352,7 +1352,7 @@ export class ProjectConfiguration<T extends BuilderConfigData>
13521352
try {
13531353
oldUsrCtxCont = usrCtxFile.Read();
13541354
} catch (error) {
1355-
GlobalEvent.emit('globalLog', ExceptionToMessage(error, 'Warning'));
1355+
GlobalEvent.log_error(error);
13561356
}
13571357
}
13581358

@@ -1362,7 +1362,7 @@ export class ProjectConfiguration<T extends BuilderConfigData>
13621362
usrCtxFile.Write(newUsrCtxCont);
13631363
}
13641364
} catch (error) {
1365-
GlobalEvent.emit('globalLog', ExceptionToMessage(error, 'Error'));
1365+
GlobalEvent.log_error(error);
13661366
}
13671367
}
13681368

src/GlobalEvents.ts

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
*/
2424

2525
import * as events from 'events';
26-
import { Message, ExceptionToMessage } from './Message';
26+
import { Message, ExceptionToMessage, newMessage } from './Message';
2727

2828
let _globalEvent: GlobalEvent | undefined;
2929

@@ -76,14 +76,33 @@ export class GlobalEvent {
7676
static emit(event: 'project.activeStatusChanged', newuid: string): boolean;
7777

7878
//msg
79-
static emit(event: 'error', error: Error): boolean;
80-
static emit(event: 'msg', msg: Message): boolean;
81-
static emit(event: 'globalLog', msg: Message): boolean;
82-
static emit(event: 'globalLog.append', log: string): boolean;
83-
static emit(event: 'globalLog.show'): boolean;
79+
static emit(event: 'error', error: Error): boolean; // 错误弹框(vscode 右下角)
80+
static emit(event: 'msg', msg: Message): boolean; // 消息弹框(vscode 右下角)
81+
static emit(event: 'globalLog', msg: Message): boolean; // 打印日志+换行 -> 输出面板
82+
static emit(event: 'globalLog.append', log: string): boolean; // 打印原始日志字串 -> 输出面板
83+
static emit(event: 'globalLog.show'): boolean; // 向用户显示eide输出面板日志
8484
static emit(event: any, args?: any): boolean {
8585
return GlobalEvent.GetInstance()._emitter.emit(event, args);
8686
}
87+
88+
//log
89+
static log_info(msg: string) {
90+
GlobalEvent.GetInstance()._emitter.emit('globalLog', newMessage('Info', msg));
91+
}
92+
static log_warn(msg: string | Error) {
93+
if (typeof msg == 'string') {
94+
GlobalEvent.GetInstance()._emitter.emit('globalLog', newMessage('Warning', msg));
95+
} else {
96+
GlobalEvent.GetInstance()._emitter.emit('globalLog', ExceptionToMessage(msg, 'Warning'));
97+
}
98+
}
99+
static log_error(msg: string | Error) {
100+
if (typeof msg == 'string') {
101+
GlobalEvent.GetInstance()._emitter.emit('globalLog', newMessage('Error', msg));
102+
} else {
103+
GlobalEvent.GetInstance()._emitter.emit('globalLog', ExceptionToMessage(msg, 'Error'));
104+
}
105+
}
87106
}
88107

89108
GlobalEvent.on('error', (err) => {

src/IarProjectParser.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ function tryGetIarChipInfo(iarToolRoot: File, rawChipNameStr: string): { [key: s
293293
try {
294294
return ini.parse(fli[idx].Read());
295295
} catch (error) {
296-
GlobalEvent.emit('globalLog', ExceptionToMessage(error, 'Warning'));
296+
GlobalEvent.log_warn(error);
297297
}
298298
}
299299
}

src/LogAnalyzer.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,11 @@ type MessageCategory = MessageType | 'Log';
4343
export class LogAnalyzer {
4444

4545
private _event: EventEmitter;
46-
private _hostInfoReg: RegExp;
4746

4847
private constructor() {
4948
this._event = new EventEmitter();
5049
this._event.on('msg', (msg) => this.DispatchMessage(msg));
51-
this._hostInfoReg = /\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s*:\s*\d{1,5}/g;
52-
53-
GlobalEvent.on('msg', (msg: Message) => {
54-
LogAnalyzer.emit('msg', msg);
55-
});
50+
GlobalEvent.on('msg', (msg) => LogAnalyzer.emit('msg', msg));
5651
}
5752

5853
static GetInstance(): LogAnalyzer {
@@ -130,7 +125,6 @@ export class LogAnalyzer {
130125

131126
if (result.msg.contentType === 'exception') {
132127
try {
133-
result.msg.content = result.msg.content.replace(this._hostInfoReg, '<eide remote log server>');
134128
let eMsg: ExceptionMessage = JSON.parse(result.msg.content);
135129
result.displayable = {
136130
title: eMsg.name,

0 commit comments

Comments
 (0)