| |
| |
| |
| |
|
|
| const fs = require('fs'); |
| const path = require('path'); |
|
|
| |
| const LOG_DIR = path.join(process.env.HOME || '/home/node', 'logs'); |
| if (!fs.existsSync(LOG_DIR)) { |
| try { |
| fs.mkdirSync(LOG_DIR, { recursive: true }); |
| } catch (e) { |
| |
| } |
| } |
|
|
| const LOG_FILE = path.join(LOG_DIR, 'app.json.log'); |
|
|
| class Logger { |
| constructor(moduleName) { |
| this.module = moduleName; |
| } |
|
|
| _log(level, message, data = {}) { |
| const entry = { |
| timestamp: new Date().toISOString(), |
| level: level.toUpperCase(), |
| module: this.module, |
| message, |
| ...data |
| }; |
|
|
| const jsonLine = JSON.stringify(entry); |
| |
| |
| console.log(jsonLine); |
|
|
| |
| try { |
| fs.appendFileSync(LOG_FILE, jsonLine + '\n'); |
| } catch (e) { |
| |
| console.error(`[LOGGER_FAIL] Could not write to log file: ${e.message}`); |
| } |
| } |
|
|
| info(message, data) { this._log('INFO', message, data); } |
| warn(message, data) { this._log('WARN', message, data); } |
| error(message, data) { this._log('ERROR', message, data); } |
| debug(message, data) { this._log('DEBUG', message, data); } |
| |
| |
| state(stateName, previousState, newState, data) { |
| this._log('STATE_CHANGE', `State changed: ${stateName}`, { |
| previousState, |
| newState, |
| ...data |
| }); |
| } |
| } |
|
|
| module.exports = (moduleName) => new Logger(moduleName); |
|
|