diff options
| author | Kevin J Hoerr <kjhoerr@protonmail.com> | 2019-12-08 01:02:14 -0500 |
|---|---|---|
| committer | Kevin J Hoerr <kjhoerr@protonmail.com> | 2019-12-08 01:02:14 -0500 |
| commit | e499e3dc34d1e91cdad9276a7a168041479e6e64 (patch) | |
| tree | 9d677cebfe39e8c43d53efe63d118c0c7d7277ef /src/util | |
| parent | b614360c8a316e0933122ac1e3a631c0d0773a80 (diff) | |
| download | ao-coverage-e499e3dc34d1e91cdad9276a7a168041479e6e64.tar.gz ao-coverage-e499e3dc34d1e91cdad9276a7a168041479e6e64.tar.bz2 ao-coverage-e499e3dc34d1e91cdad9276a7a168041479e6e64.zip | |
Add winston, express-winston to handle logging
Diffstat (limited to 'src/util')
| -rw-r--r-- | src/util/config.ts | 38 | ||||
| -rw-r--r-- | src/util/logger.ts | 21 |
2 files changed, 59 insertions, 0 deletions
diff --git a/src/util/config.ts b/src/util/config.ts new file mode 100644 index 0000000..c155e64 --- /dev/null +++ b/src/util/config.ts @@ -0,0 +1,38 @@ +import winston from "winston"; +import { MongoClient } from "mongodb"; +import { Server } from "http"; + +import logger_config from "./logger"; + +const logger = winston.createLogger(logger_config("ROOT")); + +export const config_or_error = (var_name: string) => { + if (!process.env[var_name]) { + logger.error("%s must be defined", var_name); + process.exit(1); + return ""; + } else { + return process.env[var_name] || ""; + } +}; + +export const handle_shutdown = (mongo: MongoClient, server: Server) => ( + signal: NodeJS.Signals +) => { + logger.warn("%s signal received. Closing shop.", signal); + + mongo + .close() + .then(() => { + logger.info("MongoDB client connection closed."); + return new Promise((res, rej) => + server.close(err => { + logger.info("Express down."); + (err ? rej : res)(err); + }) + ); + }) + .finally(() => { + process.exit(0); + }); +}; diff --git a/src/util/logger.ts b/src/util/logger.ts new file mode 100644 index 0000000..bafb829 --- /dev/null +++ b/src/util/logger.ts @@ -0,0 +1,21 @@ +import winston from "winston"; +const { combine, splat, timestamp, label, colorize, printf } = winston.format; +const { Console } = winston.transports; + +const LOG_LEVEL = process.env.LOG_LEVEL || "info"; + +/** + * Provides standard logging format and output for the server. + */ +export default (clazz: string, level: string = LOG_LEVEL) => ({ + format: combine( + splat(), + timestamp(), + label({ label: clazz }), + colorize(), + printf(({ level, message, label, timestamp }) => { + return `${timestamp} [${label}] ${level}: ${message}`; + }) + ), + transports: [new Console({ level: level })] +}); |
