diff --git a/lib/util/logger.js b/lib/util/logger.js index c68bdb62..0f504e1f 100644 --- a/lib/util/logger.js +++ b/lib/util/logger.js @@ -1,6 +1,5 @@ const winston = require('winston'); const moment = require('moment'); -const data = require('./data'); const settings = require('./settings'); const path = require('path'); const fs = require('fs'); @@ -8,25 +7,11 @@ const fx = require('mkdir-recursive'); const rimraf = require('rimraf'); // Determine the log level. -let level = winston.level.info; -if (process.env.DEBUG) { - level = 'debug'; -} else if (settings.get().advanced && settings.get().advanced.log_level) { - level = settings.get().advanced.log_level; -} +const level = settings.get().advanced.log_level; // Directoy to log to -let rootDirectory = path.join(data.getPath(), 'log'); -if (settings.get().advanced && settings.get().advanced.log_directory) { - rootDirectory = settings.get().advanced.log_directory; -} - -// Add start time to directory. -let directory = path.join(rootDirectory, moment(Date.now()).format('YYYY-MM-DD.HH:mm:ss')); -if (settings.get().advanced && settings.get().advanced.hasOwnProperty('log_directory_timestamp') && - settings.get().advanced.log_directory_timestamp === false) { - directory = rootDirectory; -} +const timestamp = moment(Date.now()).format('YYYY-MM-DD.HH-mm-ss'); +const directory = settings.get().advanced.log_directory.replace('%TIMESTAMP%', timestamp); // Make sure that log directoy exsists fx.mkdirSync(directory); @@ -38,8 +23,8 @@ const logger = new (winston.Logger)({ filename: path.join(directory, 'log.txt'), json: false, level: level, - maxFiles: 3, // Max 3 files per run. - maxsize: 10000000, // 10MB // Only if Filename is static! + maxFiles: 3, // Keep last 3 files + maxsize: 10000000, // 10MB timestamp: () => new Date().toLocaleString(), }), new (winston.transports.Console)({ @@ -58,16 +43,20 @@ logger.info(`Logging to directory: '${directory}'`); logger.transports.console.level = level; // Cleanup any old log directory. -let directories = fs.readdirSync(rootDirectory).map((d) => { - d = path.join(rootDirectory, d); - return {path: d, birth: fs.statSync(d).birthtimeMs}; -}); +if (settings.get().advanced.log_directory.includes('%TIMESTAMP%')) { + const rootDirectory = path.join(directory, '..'); -directories.sort((a, b) => b.birth - a.birth); -directories = directories.slice(10, directories.length); -directories.forEach((dir) => { - logger.debug(`Removing old log directory '${dir.path}'`); - rimraf.sync(dir.path); -}); + let directories = fs.readdirSync(rootDirectory).map((d) => { + d = path.join(rootDirectory, d); + return {path: d, birth: fs.statSync(d).birthtimeMs}; + }); + + directories.sort((a, b) => b.birth - a.birth); + directories = directories.slice(10, directories.length); + directories.forEach((dir) => { + logger.debug(`Removing old log directory '${dir.path}'`); + rimraf.sync(dir.path); + }); +} module.exports = logger; diff --git a/lib/util/settings.js b/lib/util/settings.js index a63fcb87..9858292e 100644 --- a/lib/util/settings.js +++ b/lib/util/settings.js @@ -2,6 +2,15 @@ const yaml = require('js-yaml'); const fs = require('fs'); const data = require('./data'); const file = data.joinPath('configuration.yaml'); +const objectAssignDeep = require(`object-assign-deep`); +const path = require('path'); + +const defaults = { + advanced: { + log_directory: path.join(data.getPath(), 'log', '%TIMESTAMP%'), + log_level: process.env.DEBUG ? 'debug' : 'info', + }, +}; let settings = read(); @@ -57,7 +66,7 @@ function changeFriendlyName(old, new_) { } module.exports = { - get: () => settings, + get: () => objectAssignDeep.noMutate(defaults, settings), write: () => write(), getDevice: (id) => settings.devices ? settings.devices[id] : null, addDevice: (id) => addDevice(id),