wa-dev-tools/lib/logger.js

38 lines
1.1 KiB
JavaScript

const fs = require('fs');
const path = require('path');
const pino = require('pino');
const LOG_FILE = path.join(__dirname, '..', 'compress.log');
const logger = pino({
level: process.env.LOG_LEVEL || 'info',
transport: process.env.NODE_ENV !== 'production' ? {
target: 'pino/file',
options: { destination: 1 },
} : undefined,
});
const MAX_LOG_BYTES = 5 * 1024 * 1024; // rotate at 5MB, keep one previous file
function logToFile(text) {
const ts = new Date().toISOString();
const line = `[${ts}] ${text}\n`;
fs.stat(LOG_FILE, (statErr, st) => {
if (!statErr && st.size > MAX_LOG_BYTES) {
try { fs.renameSync(LOG_FILE, LOG_FILE + '.1'); } catch {}
}
fs.appendFile(LOG_FILE, line, (err) => {
if (err) logger.warn({ error: err.message }, 'logToFile failed');
});
});
}
module.exports = {
info: (msg, meta) => meta ? logger.info(meta, msg) : logger.info(msg),
warn: (msg, meta) => meta ? logger.warn(meta, msg) : logger.warn(msg),
error: (msg, meta) => meta ? logger.error(meta, msg) : logger.error(msg),
debug: (msg, meta) => meta ? logger.debug(meta, msg) : logger.debug(msg),
logToFile,
logger,
};