| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- const fs = require('fs');
- const path = require('path');
- const LOG_FILE = path.join(process.cwd(), 'application.log');
- /**
- * Format log entry dengan timestamp dan metadata
- */
- const formatLog = (level, context, message, meta = {}) => {
- const timestamp = new Date().toISOString();
- const metaStr = Object.keys(meta).length ? ` | ${JSON.stringify(meta)}` : '';
- return `[${timestamp}] [${level}] [${context}] ${message}${metaStr}\n`;
- };
- /**
- * Write ke file synchronously (simple, no dependencies)
- * ponytail: pakai sync untuk guarantee write, upgrade to stream jika high volume
- */
- const writeLog = (entry) => {
- try {
- fs.appendFileSync(LOG_FILE, entry, 'utf8');
- } catch (err) {
- console.error('[Logger] Failed to write log file:', err.message);
- }
- };
- module.exports = {
- logInfo: (context, message, meta = {}) => {
- const entry = formatLog('INFO', context, message, meta);
- console.log(entry.trim());
- writeLog(entry);
- },
- logError: (context, message, meta = {}) => {
- const entry = formatLog('ERROR', context, message, meta);
- console.error(entry.trim());
- writeLog(entry);
- },
- logWarn: (context, message, meta = {}) => {
- const entry = formatLog('WARN', context, message, meta);
- console.warn(entry.trim());
- writeLog(entry);
- },
- };
|