Skip to content

Commit d99a492

Browse files
author
Andy
authored
Simplify server logger (#17271)
* Simplify server logger * Move function printProjects out of inner closure
1 parent 94518e8 commit d99a492

File tree

8 files changed

+67
-104
lines changed

8 files changed

+67
-104
lines changed

src/harness/harnessLanguageService.ts

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -681,11 +681,11 @@ namespace Harness.LanguageService {
681681
}
682682

683683
info(message: string): void {
684-
return this.host.log(message);
684+
this.host.log(message);
685685
}
686686

687-
msg(message: string) {
688-
return this.host.log(message);
687+
err(message: string): void {
688+
this.host.log(message);
689689
}
690690

691691
loggingEnabled() {
@@ -700,17 +700,12 @@ namespace Harness.LanguageService {
700700
return false;
701701
}
702702

703-
704-
endGroup(): void {
705-
}
703+
group() { throw ts.notImplemented(); }
706704

707705
perftrc(message: string): void {
708706
return this.host.log(message);
709707
}
710708

711-
startGroup(): void {
712-
}
713-
714709
setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): any {
715710
return setTimeout(callback, ms, args);
716711
}

src/harness/unittests/cachingInServerLSHost.ts

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -52,21 +52,9 @@ namespace ts {
5252
}
5353

5454
function createProject(rootFile: string, serverHost: server.ServerHost): { project: server.Project, rootScriptInfo: server.ScriptInfo } {
55-
const logger: server.Logger = {
56-
close: noop,
57-
hasLevel: () => false,
58-
loggingEnabled: () => false,
59-
perftrc: noop,
60-
info: noop,
61-
startGroup: noop,
62-
endGroup: noop,
63-
msg: noop,
64-
getLogFileName: (): string => undefined
65-
};
66-
6755
const svcOpts: server.ProjectServiceOptions = {
6856
host: serverHost,
69-
logger,
57+
logger: projectSystem.nullLogger,
7058
cancellationToken: { isCancellationRequested: () => false },
7159
useSingleInferredProject: false,
7260
typingsInstaller: undefined

src/harness/unittests/session.ts

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,6 @@ namespace ts.server {
2828
createHash: Harness.LanguageService.mockHash,
2929
};
3030

31-
const mockLogger: Logger = {
32-
close: noop,
33-
hasLevel(): boolean { return false; },
34-
loggingEnabled(): boolean { return false; },
35-
perftrc: noop,
36-
info: noop,
37-
startGroup: noop,
38-
endGroup: noop,
39-
msg: noop,
40-
getLogFileName: (): string => undefined
41-
};
42-
4331
class TestSession extends Session {
4432
getProjectService() {
4533
return this.projectService;
@@ -58,7 +46,7 @@ namespace ts.server {
5846
typingsInstaller: undefined,
5947
byteLength: Utils.byteLength,
6048
hrtime: process.hrtime,
61-
logger: mockLogger,
49+
logger: projectSystem.nullLogger,
6250
canUseEvents: true
6351
};
6452
return new TestSession(opts);
@@ -408,7 +396,7 @@ namespace ts.server {
408396
typingsInstaller: undefined,
409397
byteLength: Utils.byteLength,
410398
hrtime: process.hrtime,
411-
logger: mockLogger,
399+
logger: projectSystem.nullLogger,
412400
canUseEvents: true
413401
});
414402
this.addProtocolHandler(this.customHandler, () => {
@@ -475,7 +463,7 @@ namespace ts.server {
475463
typingsInstaller: undefined,
476464
byteLength: Utils.byteLength,
477465
hrtime: process.hrtime,
478-
logger: mockLogger,
466+
logger: projectSystem.nullLogger,
479467
canUseEvents: true
480468
});
481469
this.addProtocolHandler("echo", (req: protocol.Request) => ({

src/harness/unittests/tsserverProjectSystem.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,13 @@ namespace ts.projectSystem {
3434
}
3535

3636
export const nullLogger: server.Logger = {
37-
close: () => void 0,
38-
hasLevel: () => void 0,
37+
close: noop,
38+
hasLevel: () => false,
3939
loggingEnabled: () => false,
40-
perftrc: () => void 0,
41-
info: () => void 0,
42-
startGroup: () => void 0,
43-
endGroup: () => void 0,
44-
msg: () => void 0,
40+
perftrc: noop,
41+
info: noop,
42+
err: noop,
43+
group: noop,
4544
getLogFileName: (): string => undefined
4645
};
4746

src/server/editorServices.ts

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -928,26 +928,24 @@ namespace ts.server {
928928
return;
929929
}
930930

931-
this.logger.startGroup();
931+
this.logger.group(info => {
932+
let counter = 0;
933+
counter = printProjects(this.externalProjects, info, counter);
934+
counter = printProjects(this.configuredProjects, info, counter);
935+
printProjects(this.inferredProjects, info, counter);
932936

933-
let counter = 0;
934-
counter = printProjects(this.logger, this.externalProjects, counter);
935-
counter = printProjects(this.logger, this.configuredProjects, counter);
936-
counter = printProjects(this.logger, this.inferredProjects, counter);
937-
938-
this.logger.info("Open files: ");
939-
for (const rootFile of this.openFiles) {
940-
this.logger.info(`\t${rootFile.fileName}`);
941-
}
942-
943-
this.logger.endGroup();
937+
info("Open files: ");
938+
for (const rootFile of this.openFiles) {
939+
info(`\t${rootFile.fileName}`);
940+
}
941+
});
944942

945-
function printProjects(logger: Logger, projects: Project[], counter: number) {
943+
function printProjects(projects: Project[], info: (msg: string) => void, counter: number): number {
946944
for (const project of projects) {
947945
project.updateGraph();
948-
logger.info(`Project '${project.getProjectName()}' (${ProjectKind[project.projectKind]}) ${counter}`);
949-
logger.info(project.filesToString());
950-
logger.info("-----------------------------------------------");
946+
info(`Project '${project.getProjectName()}' (${ProjectKind[project.projectKind]}) ${counter}`);
947+
info(project.filesToString());
948+
info("-----------------------------------------------");
951949
counter++;
952950
}
953951
return counter;

src/server/server.ts

Lines changed: 35 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,6 @@ namespace ts.server {
139139
class Logger implements server.Logger {
140140
private fd = -1;
141141
private seq = 0;
142-
private inGroup = false;
143-
private firstInGroup = true;
144142

145143
constructor(private readonly logFilename: string,
146144
private readonly traceToConsole: boolean,
@@ -170,22 +168,24 @@ namespace ts.server {
170168
}
171169

172170
perftrc(s: string) {
173-
this.msg(s, Msg.Perf);
171+
this.msg(s, "Perf");
174172
}
175173

176174
info(s: string) {
177-
this.msg(s, Msg.Info);
175+
this.msg(s, "Info");
178176
}
179177

180-
startGroup() {
181-
this.inGroup = true;
182-
this.firstInGroup = true;
178+
err(s: string) {
179+
this.msg(s, "Err");
183180
}
184181

185-
endGroup() {
186-
this.inGroup = false;
182+
group(logGroupEntries: (log: (msg: string) => void) => void) {
183+
let firstInGroup = false;
184+
logGroupEntries(s => {
185+
this.msg(s, "Info", /*inGroup*/ true, firstInGroup);
186+
firstInGroup = false;
187+
});
187188
this.seq++;
188-
this.firstInGroup = true;
189189
}
190190

191191
loggingEnabled() {
@@ -196,26 +196,32 @@ namespace ts.server {
196196
return this.loggingEnabled() && this.level >= level;
197197
}
198198

199-
msg(s: string, type: Msg.Types = Msg.Err) {
200-
if (this.fd >= 0 || this.traceToConsole) {
201-
s = `[${nowString()}] ${s}\n`;
199+
private msg(s: string, type: string, inGroup = false, firstInGroup = false) {
200+
if (!this.canWrite) return;
201+
202+
s = `[${nowString()}] ${s}\n`;
203+
if (!inGroup || firstInGroup) {
202204
const prefix = Logger.padStringRight(type + " " + this.seq.toString(), " ");
203-
if (this.firstInGroup) {
204-
s = prefix + s;
205-
this.firstInGroup = false;
206-
}
207-
if (!this.inGroup) {
208-
this.seq++;
209-
this.firstInGroup = true;
210-
}
211-
if (this.fd >= 0) {
212-
const buf = new Buffer(s);
213-
// tslint:disable-next-line no-null-keyword
214-
fs.writeSync(this.fd, buf, 0, buf.length, /*position*/ null);
215-
}
216-
if (this.traceToConsole) {
217-
console.warn(s);
218-
}
205+
s = prefix + s;
206+
}
207+
this.write(s);
208+
if (!inGroup) {
209+
this.seq++;
210+
}
211+
}
212+
213+
private get canWrite() {
214+
return this.fd >= 0 || this.traceToConsole;
215+
}
216+
217+
private write(s: string) {
218+
if (this.fd >= 0) {
219+
const buf = new Buffer(s);
220+
// tslint:disable-next-line no-null-keyword
221+
fs.writeSync(this.fd, buf, 0, buf.length, /*position*/ null);
222+
}
223+
if (this.traceToConsole) {
224+
console.warn(s);
219225
}
220226
}
221227
}

src/server/session.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@ namespace ts.server {
366366
msg += "\n" + (<StackTraceError>err).stack;
367367
}
368368
}
369-
this.logger.msg(msg, Msg.Err);
369+
this.logger.err(msg);
370370
}
371371

372372
public send(msg: protocol.Message) {
@@ -1946,7 +1946,7 @@ namespace ts.server {
19461946
return this.executeWithRequestId(request.seq, () => handler(request));
19471947
}
19481948
else {
1949-
this.logger.msg(`Unrecognized JSON command: ${JSON.stringify(request)}`, Msg.Err);
1949+
this.logger.err(`Unrecognized JSON command: ${JSON.stringify(request)}`);
19501950
this.output(undefined, CommandNames.Unknown, request.seq, `Unrecognized JSON command: ${request.command}`);
19511951
return { responseRequired: false };
19521952
}

src/server/utilities.ts

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,11 @@ namespace ts.server {
1717
loggingEnabled(): boolean;
1818
perftrc(s: string): void;
1919
info(s: string): void;
20-
startGroup(): void;
21-
endGroup(): void;
22-
msg(s: string, type?: Msg.Types): void;
20+
err(s: string): void;
21+
group(logGroupEntries: (log: (msg: string) => void) => void): void;
2322
getLogFileName(): string;
2423
}
2524

26-
export namespace Msg {
27-
export type Err = "Err";
28-
export const Err: Err = "Err";
29-
export type Info = "Info";
30-
export const Info: Info = "Info";
31-
export type Perf = "Perf";
32-
export const Perf: Perf = "Perf";
33-
export type Types = Err | Info | Perf;
34-
}
35-
3625
function getProjectRootPath(project: Project): Path {
3726
switch (project.projectKind) {
3827
case ProjectKind.Configured:

0 commit comments

Comments
 (0)