diff --git a/logging/WinstonLogger.ts b/logging/WinstonLogger.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e63dc521e1f2d36278a246fc2dbc202a5956a4d2
--- /dev/null
+++ b/logging/WinstonLogger.ts
@@ -0,0 +1,61 @@
+import winston        from 'winston';
+import SharedConfig   from '../config/SharedConfig';
+import * as Transport from 'winston-transport';
+
+
+const levels = {
+    error: 0,
+    warn : 1,
+    info : 2,
+    http : 3,
+    debug: 4
+};
+
+const colors = {
+    error: 'red',
+    warn : 'yellow',
+    info : 'green',
+    http : 'magenta',
+    debug: 'white'
+};
+winston.addColors(colors);
+
+const format = winston.format.combine(winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss:ms' }), SharedConfig.production ? winston.format.uncolorize() : winston.format.colorize({ all: true }), winston.format.printf((info) => `${ info.timestamp } [${ process.pid }] ${ info.level }: ${ info.message }`));
+
+const commonTransportOptions = {
+    handleRejections: true,
+    handleExceptions: true
+};
+
+let transports: Array<Transport> = [ new winston.transports.Console({
+                                                                        ...commonTransportOptions,
+                                                                        level: 'debug'
+                                                                    }) ];
+
+if ( SharedConfig.production ) {
+    const commonFileOptions = {
+        ...commonTransportOptions,
+        maxsize : 5242880, // 5MB
+        maxFiles: 100,
+        tailable: true
+    };
+
+    transports = transports.concat([ new winston.transports.File({
+                                                                     ...commonFileOptions,
+                                                                     filename: `${ SharedConfig.logsFolder }/error.log`,
+                                                                     level   : 'error'
+                                                                 }), new winston.transports.File({
+                                                                                                     ...commonFileOptions,
+                                                                                                     filename: `${ SharedConfig.logsFolder }/all.log`,
+                                                                                                     level   : 'debug'
+                                                                                                 }) ]);
+}
+
+const logger = winston.createLogger({
+                                        levels,
+                                        format,
+                                        transports,
+                                        exitOnError: false
+                                    });
+
+export default logger;