diff --git a/gulpfile.babel.js b/gulpfile.babel.js
index 65d653a6da81fea5b15834ccedecd63583ef90f9..986652cccb3cdcfee0d659c0a69533943ae9a495 100644
--- a/gulpfile.babel.js
+++ b/gulpfile.babel.js
@@ -1,3 +1,5 @@
+const fs = require('fs');
+
 const gulp = require('gulp');
 
 const babel = require('gulp-babel');
@@ -14,10 +16,23 @@ const jsdoc = require('gulp-jsdoc3');
 
 const cache = new Cache();
 
+function createLogDir() {
+    const logDirPath = 'build/logs';
+    fs.access(logDirPath, fs.F_OK, (err) => {
+        if (err) {
+            console.info(`Logs directory not found, creating it.`);
+            fs.mkdir(logDirPath, 0o700, (dirErr) => {
+                console.error(`Failed to create logs directory.\n\tError: ${dirErr}`);
+            });
+        }
+    });
+}
+
 /**
  * Compile source files
  */
-function compile() {
+gulp.task('compile', () => {
+    createLogDir();
     // run ESLint
     gulp.src('src/**/*.js')
         .pipe(eslint())
@@ -33,10 +48,9 @@ function compile() {
     // copy configuration file to build directory
     gulp.src('config.json')
         .pipe(gulp.dest('build'));
+});
 
-}
-
-gulp.task('build', compile);
+gulp.task('build', ['compile']);
 
 gulp.task('doc', (cb) => {
     let config = require('./jsdoc.json');
@@ -44,7 +58,7 @@ gulp.task('doc', (cb) => {
         .pipe(jsdoc(config, cb));
 });
 
-gulp.task('test', () => {
+gulp.task('test', ['build'], () => {
   gulp.src('test/test.js', {read: false})
     .pipe(mocha())
     .once('error', () => {
@@ -55,13 +69,12 @@ gulp.task('test', () => {
     });
 });
 
-gulp.task('watch', [], () => {
+gulp.task('watch', ['compile'], () => {
     console.log('Watching source directory for changes');
-    compile();
     gulp.watch('src/**/*.js').on('change', () => {
         console.log('Recompiling source');
-        compile();
-        console.log('Source recompilation done')
+        gulp.start('compile');
+        console.log('Source recompilation done');
     });
 });
 
diff --git a/src/libs/log.js b/src/libs/log.js
index ecf6df026314105b02628ef0ac2736a23950374a..e71edf141bd434ae749725ef5298e200c1105e7e 100644
--- a/src/libs/log.js
+++ b/src/libs/log.js
@@ -10,16 +10,29 @@ function getFilePath(module) {
 }
 
 function logger(module) {
+    const logPath = `${process.cwd()}/logs`;
+    const maxLogFiles = 5;
+    const maxLogSize = 5242880;
     const log = new winston.Logger({
         transports: [
             new winston.transports.File({
                 name: 'info-log',
                 level: 'info',
-                filename: `${process.cwd()}/logs/all.log`,
+                filename: `${logPath}/simcaq-info.log`,
                 handleException: true,
                 json: false,
-                maxSize: 5242880, // 5MB
-                maxFiles: 2,
+                maxSize: maxLogSize, // 5MB
+                maxFiles: maxLogFiles,
+                colorize: false,
+            }),
+            new winston.transports.File({
+                name: 'error-log',
+                level: 'error',
+                filename: `${logPath}/simcaq-error.log`,
+                handleException: true,
+                json: false,
+                maxSize: maxLogSize, // 5MB
+                maxFiles: maxLogFiles,
                 colorize: false,
             }),
             new winston.transports.Console({
@@ -33,7 +46,9 @@ function logger(module) {
         ],
         exitOnError: false,
     });
-    if (!config.get('debug')) {
+    const debugMode = (typeof config.get('debug') === 'undefined') ?
+        config.get('debug') : false;
+    if (!debugMode) {
         log.remove('debug-log');
     }
     return log;