UNPKG

w-syslog

Version:
95 lines (79 loc) 2.7 kB
import path from 'path' import { fileURLToPath } from 'url' import get from 'lodash-es/get.js' import isestr from 'wsemi/src/isestr.mjs' import pino from 'pino' //__dirname let __filename = fileURLToPath(import.meta.url) let __dirname = path.dirname(__filename) /** * 輸出log * * @class * @param {Object} [opt={}] 輸入設定物件,預設{} * @param {String} [opt.fdLog='./_logs'] 輸入儲存log資料夾字串,預設'./_logs' * @param {String} [opt.interval='day'] 輸入儲存log時分檔模式字串,可選'day''hr',分別代表每日或每時分檔,預設'day' * @returns {Object} 回傳log物件,提供info、warn、error紀錄函數 * @example * import fs from 'fs' * import _ from 'lodash-es' * import w from 'wsemi' * import WSyslog from './src/WSyslog.mjs' * * w.fsCleanFolder('./_logs') * * let log = WSyslog() * log.info({ event: 'runner', msg: 'start' }) * log.warn({ event: 'monitor-memory', msg: 'usage-high', ratio: 85.4 }) * log.error({ event: 'crash', msg: 'db connection', code: 500 }) * * await w.delay(2000) //等待2秒讓pino能flush數據 * * let vpfs = w.fsTreeFolder('./_logs') * // console.log('vpfs', vpfs) * * let fp = _.get(vpfs, `0.path`, '') * * let jj = fs.readFileSync(fp, 'utf8') * console.log(jj) * // {"level":30,"time":1751780174415,"pid":24144,"hostname":"DESKTOP-6R7USAO","event":"runner","msg":"start"} * // {"level":40,"time":1751780174415,"pid":24144,"hostname":"DESKTOP-6R7USAO","event":"monitor-memory","msg":"usage-high"} * // {"level":50,"time":1751780174415,"pid":24144,"hostname":"DESKTOP-6R7USAO","event":"crash","msg":"db connection","code":500} * */ function WSyslog(opt = {}) { //fdLog let fdLog = get(opt, 'fdLog') if (!isestr(fdLog)) { fdLog = './_logs' } //interval let interval = get(opt, 'interval') if (interval !== 'day' && interval !== 'hr') { interval = 'day' } // 建立 logger,使用自訂 transport let transport = pino.transport({ targets: [ { // fatal: 60 // error: 50 // warn: 40 // info: 30 // debug: 20 // trace: 10 level: 'info', //僅紀錄info(30)以上 target: path.resolve(__dirname, './formatter.mjs'), options: { interval, logDir: fdLog, }, }, ] }) //log let log = pino(transport) // console.log('log', log) return log } export default WSyslog