-
Notifications
You must be signed in to change notification settings - Fork 59
Expand file tree
/
Copy pathconsoleLoggerShell.ts
More file actions
71 lines (58 loc) · 2.27 KB
/
consoleLoggerShell.ts
File metadata and controls
71 lines (58 loc) · 2.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import * as Log from "./log";
import {ConsoleOutput} from "./consoleOutput";
export class ConsoleLoggerShell {
private consoleOutput: ConsoleOutput;
private context: { [key: string]: string } = {};
constructor(consoleOutput?: ConsoleOutput) {
this.consoleOutput = consoleOutput;
}
public logToConsole(event: { [key: string]: string | number | boolean }): void {
if (!event) {
throw new Error("'event' argument to logToConsole was: " + event);
}
let level: string = <string>event[Log.PropertyName.Reserved.Level];
// if Status == Failed or SubCategory == Failure, log as an error
if (event[Log.PropertyName.Reserved.Status] === Log.Status[Log.Status.Failed]
|| event[Log.PropertyName.Reserved.Category] === Log.PropertyName.Reserved.WebClipper + "." + Log.Failure.category) {
level = Log.Trace.Level[Log.Trace.Level.Error];
}
let logger = this.consoleOutput;
// Log all events as [EventName] [level?] [message?], eventToLog for ease of reading
let messageToLog = "";
messageToLog += "[" + event[Log.PropertyName.Reserved.EventName] + "]";
messageToLog += level ? " [" + level + "]" : "";
messageToLog += Log.PropertyName.Reserved.Message in event ? " " + event[Log.PropertyName.Reserved.Message] : "";
let eventToLog: { [key: string]: string | number | boolean } = this.combineContextAndEvent(event);
switch (Log.Trace.Level[level]) {
case Log.Trace.Level.Warning:
logger.warn(messageToLog, eventToLog);
break;
case Log.Trace.Level.Error:
logger.error(messageToLog, eventToLog);
break;
case Log.Trace.Level.Verbose:
case Log.Trace.Level.Information:
logger.info(messageToLog, eventToLog);
break;
default:
logger.log(messageToLog, eventToLog);
}
}
public setContextProperty(key: string, value: string): void {
this.context[key] = value;
}
public combineContextAndEvent(event: { [key: string]: string | number | boolean }): { [key: string]: string | number | boolean } {
let contextAndEvent: { [key: string]: string | number | boolean } = {};
for (let key in this.context) {
if (this.context.hasOwnProperty(key)) {
contextAndEvent[key] = this.context[key];
}
}
for (let key in event) {
if (event.hasOwnProperty(key)) {
contextAndEvent[key] = event[key];
}
}
return contextAndEvent;
}
}