Skip to content

Instantly share code, notes, and snippets.

@alexsasharegan
Created January 28, 2018 02:14
Show Gist options
  • Save alexsasharegan/d051e7b8553d73e9bd6526551ad25f24 to your computer and use it in GitHub Desktop.
Save alexsasharegan/d051e7b8553d73e9bd6526551ad25f24 to your computer and use it in GitHub Desktop.
Basic logging interface.
export interface Logger {
Log(...args: any[]): void;
Info(...args: any[]): void;
Error(...args: any[]): void;
}
export enum LogLevel {
None = 0,
Log = 1 << 0,
Info = 1 << 1,
Error = 1 << 2,
All = LogLevel.Log | LogLevel.Info | LogLevel.Error,
}
export function NewMultiLogger(
logLevel: LogLevel,
...loggers: Logger[]
): Logger {
let manager: Logger = Object.create(null);
const createLogger = (type: keyof Logger) => (...args: any[]) => {
if ((logLevel & LogLevel[type]) === 0) {
return;
}
let l: Logger;
for (l of loggers) {
l[type](...args);
}
};
let methods: Array<keyof Logger> = ["Log", "Info", "Error"];
for (let m of methods) {
manager[m] = createLogger(m);
}
return manager;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment