diff --git a/src/util/logging.ts b/src/util/logging.ts index 4560105f4..80ba344d5 100644 --- a/src/util/logging.ts +++ b/src/util/logging.ts @@ -14,18 +14,74 @@ TALER; see the file COPYING. If not, see */ +/** + * Imports. + */ +import { isNode } from "../webex/compat"; + +function writeNodeLog( + message: string, + tag: string, + level: string, + args: any[], +) { + process.stderr.write(`${new Date().toISOString()} ${tag} ${level} `); + process.stderr.write(message); + if (args.length != 0) { + process.stderr.write(" "); + process.stderr.write(JSON.stringify(args, undefined, 2)); + } + process.stderr.write("\n"); +} + +/** + * Logger that writes to stderr when running under node, + * and uses the corresponding console.* method to log in the browser. + */ export class Logger { constructor(private tag: string) {} + info(message: string, ...args: any[]) { - console.log(`${new Date().toISOString()} ${this.tag} INFO ` + message, ...args); + if (isNode()) { + writeNodeLog(message, this.tag, "INFO", args); + } else { + console.info( + `${new Date().toISOString()} ${this.tag} INFO ` + message, + ...args, + ); + } } + warn(message: string, ...args: any[]) { - console.log(`${new Date().toISOString()} ${this.tag} WARN ` + message, ...args); + if (isNode()) { + writeNodeLog(message, this.tag, "WARN", args); + } else { + console.warn( + `${new Date().toISOString()} ${this.tag} INFO ` + message, + ...args, + ); + } } + error(message: string, ...args: any[]) { - console.log(`${new Date().toISOString()} ${this.tag} ERROR ` + message, ...args); + if (isNode()) { + writeNodeLog(message, this.tag, "ERROR", args); + } else { + console.info( + `${new Date().toISOString()} ${this.tag} ERROR ` + message, + ...args, + ); + } } + trace(message: any, ...args: any[]) { - console.log(`${new Date().toISOString()} ${this.tag} TRACE ` + message, ...args) + if (isNode()) { + writeNodeLog(message, this.tag, "TRACE", args); + } else { + console.info( + `${new Date().toISOString()} ${this.tag} TRACE ` + message, + ...args, + ); + } } -} \ No newline at end of file +} diff --git a/src/webex/compat.ts b/src/webex/compat.ts index 65ddfab4a..121c58e7f 100644 --- a/src/webex/compat.ts +++ b/src/webex/compat.ts @@ -26,3 +26,10 @@ export function isFirefox(): boolean { } return false; } + +/** + * Check if we are running under nodejs. + */ +export function isNode() { + return (typeof process !== 'undefined') && (process.release.name === 'node') +} \ No newline at end of file