Skip to content

Commit 59553bf

Browse files
authored
Merge pull request #55 from bcmi-labs/se/better-output
Better output format
2 parents a936e4c + 037efba commit 59553bf

File tree

2 files changed

+39
-26
lines changed

2 files changed

+39
-26
lines changed

arduino-ide-extension/src/node/arduino-daemon.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { ToolOutputServiceServer } from '../common/protocol/tool-output-service'
1414
export class ArduinoDaemon implements BackendApplicationContribution {
1515

1616
// Set this to `true` if you want to connect to a CLI running in debug mode.
17-
static DEBUG_CLI = false;
17+
static DEBUG_CLI = false;
1818

1919
@inject(ILogger)
2020
@named('daemon')
@@ -57,13 +57,13 @@ export class ArduinoDaemon implements BackendApplicationContribution {
5757

5858
if (daemon.stdout) {
5959
daemon.stdout.on('data', data => {
60-
this.toolOutputService.publishNewOutput('daemon', data.toString());
60+
this.toolOutputService.publishNewOutput('daemon', DaemonLog.toPrettyString(data.toString()));
6161
DaemonLog.log(this.logger, data.toString());
6262
});
6363
}
6464
if (daemon.stderr) {
6565
daemon.stderr.on('data', data => {
66-
this.toolOutputService.publishNewOutput('daemon error', data.toString());
66+
this.toolOutputService.publishNewOutput('daemon error', DaemonLog.toPrettyString(data.toString()));
6767
DaemonLog.log(this.logger, data.toString());
6868
});
6969
}

arduino-ide-extension/src/node/daemon-log.ts

Lines changed: 36 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -32,36 +32,49 @@ export namespace DaemonLog {
3232
const segments = toLog.split('time').filter(s => s.trim().length > 0);
3333
for (const segment of segments) {
3434
const maybeDaemonLog = parse(`time${segment}`.trim());
35-
if (is(maybeDaemonLog)) {
36-
const { msg } = maybeDaemonLog;
37-
logger.log(toLogLevel(maybeDaemonLog), msg);
38-
} else {
39-
logger.info(toLog.trim());
35+
for (const logMsg of maybeDaemonLog) {
36+
logger.log(toLogLevel(logMsg), logMsg.msg);
4037
}
4138
}
4239
}
4340

4441
// Super naive.
45-
function parse(toLog: string): string | DaemonLog {
46-
const rawSegments = toLog.split(/(\s+)/)
47-
.map(segment => segment.replace(/['"]+/g, ''))
48-
.map(segment => segment.trim())
49-
.filter(segment => segment.length > 0);
42+
function parse(toLog: string): DaemonLog[] {
43+
const messages = toLog.split('\ntime=');
44+
const result: DaemonLog[] = [];
45+
for (let i = 0; i < messages.length; i++) {
46+
const msg = (i > 0 ? 'time=' : '') + messages[i];
47+
const rawSegments = msg.split(/(\s+)/)
48+
.map(segment => segment.replace(/['"]+/g, ''))
49+
.map(segment => segment.trim())
50+
.filter(segment => segment.length > 0);
5051

51-
const timeIndex = rawSegments.findIndex(segment => segment.startsWith('time='));
52-
const levelIndex = rawSegments.findIndex(segment => segment.startsWith('level='));
53-
const msgIndex = rawSegments.findIndex(segment => segment.startsWith('msg='));
54-
if (rawSegments.length > 2
55-
&& timeIndex !== -1
56-
&& levelIndex !== -1
57-
&& msgIndex !== -1) {
58-
return {
59-
time: rawSegments[timeIndex].split('=')[1],
60-
level: rawSegments[levelIndex].split('=')[1] as Level,
61-
msg: [rawSegments[msgIndex].split('=')[1], ...rawSegments.slice(msgIndex + 1)].join(' ')
62-
}
52+
const timeIndex = rawSegments.findIndex(segment => segment.startsWith('time='));
53+
const levelIndex = rawSegments.findIndex(segment => segment.startsWith('level='));
54+
const msgIndex = rawSegments.findIndex(segment => segment.startsWith('msg='));
55+
if (rawSegments.length > 2
56+
&& timeIndex !== -1
57+
&& levelIndex !== -1
58+
&& msgIndex !== -1) {
59+
result.push({
60+
time: rawSegments[timeIndex].split('=')[1],
61+
level: rawSegments[levelIndex].split('=')[1] as Level,
62+
msg: [rawSegments[msgIndex].split('=')[1], ...rawSegments.slice(msgIndex + 1)].join(' ')
63+
});
64+
} else {
65+
result.push({
66+
time: new Date().toString(),
67+
level: 'info',
68+
msg: msg
69+
});
70+
}
6371
}
6472
// Otherwise, log the string as is.
65-
return toLog;
73+
return result;
74+
}
75+
76+
export function toPrettyString(logMessage: string): string {
77+
const parsed = parse(logMessage);
78+
return parsed.map(msg => `[${msg.level.toUpperCase() || 'INFO'}] ${msg.msg}\n`).join('');
6679
}
6780
}

0 commit comments

Comments
 (0)