diff --git a/gentong.js b/gentong.js
index 0dd3e70..d1845d4 100644
--- a/gentong.js
+++ b/gentong.js
@@ -9,6 +9,9 @@ var redis = require('redis');
 
 var Router = require('node-simple-router');
 
+var winston = require('winston');
+
+var logger;
 var config;
 var httpServer;
 var redisClient;
@@ -52,15 +55,26 @@ function topupRequest(task) {
         }
     };
 
-    console.log(options);
+    logger.info('Creating http request to gateway', {options: options});
 
     request(options, function (error, response, body) {
         
-        console.log(logTag + ': DIRECT RESPONSE');
+        logger.info(logTag + ': DIRECT RESPONSE');
+        
+        if (error) {
+            
+            var error_message = 'Error on http connection to gateway: ' + error;
+            logger.warn(error_message);
+            callbackReport(task['requestId'], '91', error_message);
+            return;
 
-        if (error || response.statusCode != 200) {
-            console.log(logTag + ': ' + 'Gateway Error');
-            callbackReport(task['requestId'], '91', 'Gateway Error');
+        } 
+        
+        if (response.statusCode != 200) {
+            
+            var error_message = 'Gateway error, http response code: ' + response.statusCode;
+            logger.warn(error_message);
+            callbackReport(task['requestId'], '91', error_message);
             return;
         }
         
@@ -69,12 +83,12 @@ function topupRequest(task) {
         
         xml2js(body, function (err, result) {
             if (err) {
-                console.log(body);
+                logger.warn('Error parsing XML', {response_body: body});
                 callbackReport(task['requestId'], '40', body);
                 return;
             }
             
-            console.log(result);
+            logger.info(result);
             
             try {
                 if (result.direct_ack.request_status == 'OK') {
@@ -92,7 +106,7 @@ function topupRequest(task) {
                 responseMessage =  result.direct_ack.info;
             }
             catch(err) {
-                console.log('Exception on parsing request response');
+                logger.warn('Exception on parsing request response');
                 responseCode = 40;
                 responseMessage = 'Invalid response from gateway';
             }
@@ -118,7 +132,7 @@ function parseSN(message, _config) {
     var sn_match = message.match(sn_regex);
         
     if (sn_match <= 0) {
-        console.log('SN Not found: ' + message);
+        logger.info('SN Not found: ' + message);
         return '';
     }
     
@@ -142,7 +156,7 @@ function createServer() {
         
         var qs = url.parse(request.url, true).query;
         
-        console.log(qs);
+        logger.info('Got reverse report from gateway', {qs: qs});
         
         if (qs.topup_status == 'S') {
             response_code = '00';
@@ -166,7 +180,7 @@ function createServer() {
             
         }
         catch(err) {
-            console.log('Exception on parsing reverse report');
+            logger.warn('Exception on parsing reverse report', {exception: err} );
             response_code = '40';
         }
         
@@ -181,7 +195,7 @@ function createServer() {
         var key = getRedisKey(qs.ts);
         redisClient.get(key, function(err, request_id) {
             if (err) {
-                console.log('Error when requesting request id for ts:' + qs.ts + ' (' + key + ')');
+                logger.warn('Error when requesting request id for ts:' + qs.ts + ' (' + key + ')', {redis_error: err});
                 return;
             }
             
@@ -190,7 +204,7 @@ function createServer() {
     });
     
     httpServer.listen(config.h2h_out.listen_port, function() {
-        console.log('HTTP Reverse/Report server listen on port ' + config.h2h_out.listen_port);
+        logger.info('HTTP Reverse/Report server listen on port ' + config.h2h_out.listen_port);
     });
 }
 
@@ -223,13 +237,13 @@ function responseCodeFromMessage(message) {
 function updateBalance(message) {
     var balance = getBalanceFromMessage(message);
     if (balance) {
-        console.log('Balance: ' + balance);
+        logger.info('Balance: ' + balance);
         
         try {
             aaa.updateBalance(balance);
         }
         catch(err) {
-            console.log('Exception on partner.updateBalance: ' + err);
+            logger.warn('Exception on partner.updateBalance: ' + err, {exception: err});
         }
     }
 }
@@ -265,10 +279,18 @@ function start(_config, _callbackReport, options) {
     config = _config;
     callbackReport = _callbackReport
     
-    if (options) {
-        if (options.aaa) {
+    if (options && options.aaa) {
             aaa = options.aaa;
-        }
+    }
+    
+    if (options && options.logger) {
+        logger = options.logger;
+    } else {
+        logger = new winston.Logger({
+            transports: [
+              new (winston.transports.Console)()
+            ]
+        });
     }
     
     createRedisClient();
diff --git a/index.js b/index.js
index 6597394..a4da4ae 100644
--- a/index.js
+++ b/index.js
@@ -3,8 +3,10 @@ var config = iniparser.parseSync('./config.ini');
 
 var aaaHost = config.globals.aaa_host;
 
+var logger = require('sate24/logger.js').start();
+
 HttpServer = require('sate24/httpserver.js');
-var httpServer = HttpServer.start(config);
+var httpServer = HttpServer.start(config, {logger: logger});
 
 var aaa = require('sate24/aaa.js');
 HttpServer.setAaa(aaa);
@@ -12,8 +14,9 @@ HttpServer.setAaa(aaa);
 var partner = require('./gentong.js');
 
 var partner_options = {
-    'aaa': aaa
+    'aaa': aaa,
+    'logger': logger
 }
 
 partner.start(config, aaa.callbackReport, partner_options);
-aaa.start(config, partner);
+aaa.start(config, partner, {logger: logger});
diff --git a/package.json b/package.json
index 41c8e4c..f8d5045 100644
--- a/package.json
+++ b/package.json
@@ -30,6 +30,7 @@
     "xml2js": "~0.4.9",
     "redis": "~0.12.1",
     "node-simple-router": "~0.9.4-2",
-    "sate24": "git+http://git@gitlab.kodesumber.com/reload97/node-sate24.git"
+    "sate24": "git+http://git@gitlab.kodesumber.com/reload97/node-sate24.git",
+    "winston": "~1.0.1"
   }
 }