folder-logger
v1.0.9
Published
π A module that helps you sort logs into physical folders according to their importance, save them to a file, and apply text formatting to all logs in batches.
Downloads
15
Readme
Folder-Logger
κ°νΈν λ‘κ·Έ κΈ°λ‘ κ΄λ¦¬,
μ€μλμ λ°λ₯Έ μλν λ ν΄λ λΆλ₯
λ μ§μ μκ°μ λ°λ₯Έ μλν λ νμΌ λΆλ₯
μ΄μ κΈ°λ³Έ ν μ€νΈ ν¬λ©§ν
Node.js μμ μ½κ² μ¬μ©ν μ μλ λ‘κ±° λͺ¨λμ λλ€.
μ¬μ©λͺ¨μ΅
Folder-Logger λ λͺ¨λ λ‘κ·Έμ μ΄λΈ ν μ€νΈ ν¬λ©§ν μ μ μ©μν€λ κΈ°λ³Έ κΈ°λ₯μ κ°μ§κ³ μμ΅λλ€. μ΄ κΈ°λ₯μ μ΄μ©μ νμμ λ°λΌ 컀μ€ν°λ§μ΄μ§ λ μ μμΌλ©°, ν¬λ©§ν μ λκ±°λ, μ½μμ νμλμ§ μκ³ νμΌμλ§ κΈ°λ‘λκ² μ²λ¦¬ν μλ μμ΅λλ€.
Bash μ¬μ©μ
Windows, Mac μμ Bash μ¬μ©μ 보μ¬μ§λ λͺ¨μ΅μ λλ€. κ°κΈμ Bash κΈ°λ° μ½μμ μ΄μ©ν κ²μ κΆμ₯ν©λλ€.
Windows CMD μ¬μ©μ
Folder-Logger μ κΈ°λ³Έ ν μ€νΈ ν¬λ©§ν μ μ΄λ ν λ³νλ μλ Windows κΈ°λ³Έ CMD λ κ³ λ €νμ¬ κ΅¬μ±λμ΄μμ΅λλ€.
ν΄λλ‘ λΆλ₯λ λ‘κ·Έ λ°μ΄ν° μ
Folder-Logger λ λ‘κ·Έ μ€μλμ λ‘κ·Έλ₯Ό λΆλ₯ν΄μ κ°κΈ° λ€λ₯Έ ν΄λμ μ μ₯ν©λλ€. μ΄λ κ² μ μ₯λλ ν΄λλ λ μ§μ λ°λΌμ μ μ₯λλ―λ‘, μ°Ύκ³ μλ μ€μλμ λ μ§μ μκ°μ ν΄λΉνλ λ‘κ·Έλ₯Ό μ΄λ ν μλν°μμλ νλ¬κ·ΈμΈ λλ κ²μμμ΄ λ¬Όλ¦¬μ ν΄λ λ° νμΌ λΆλ₯λ‘ μ½κ² μ°Ύμ μ μμ΅λλ€.
μ μ₯λλ λ‘κ·Έ λ°μ΄ν° μ
ν μ€νΈμ μ΄λ ν ANSI 컬λ¬λ₯Ό μ¬μ©νκ±°λ νΉμλ¬Έμλ₯Ό μ¬μ©ν΄λ, λ‘κ·Έμμμ κΉ¨μ§μ§ μκ³ μ½μμμ νμλ Unicode κ° κΉλνκ² μκ°κ³Ό ν¨κ» μ 리λ©λλ€. μ μ₯λλ λ‘κ·Έννλ μ΄μ©μκ° μ§μ 컀μ€ν°λ§μ΄μ§ ν μ μμΌλ©°, μ΄λ¬ν λ‘κ·Έ ν¬λ©§ν μ λ‘κ·Έμ λ°λΌ μμ λ‘κ² λκ³ μΌ€ μ μμ΅λλ€.
μ¬μ© λ°©λ²
λͺ¨λ μ€μΉ
npm install --save folder-logger
λ‘κ±° μμ±
λ‘κ·Έλ₯Ό μ μ₯ν ν΄λκ²½λ‘λ₯Ό 미리 λ§λ€κ±°λ, λ‘κ·ΈνμΌμ μλ‘ λ§λ€ νμλ μμ΅λλ€. μ§μ λ ν΄λκ²½λ‘λ΄ ν΄λ κ³μΈ΅μ΄ μλ κ²½μ° ν΄λλ₯Ό μμ±νλ©°, λ‘κ·Έ νμΌλ μλμΌλ‘ μμ±ν©λλ€. (λν νλ‘κ·Έλ¨μ΄ λ€μ μΌμ§λλΌλ λ‘κ·Έκ° μ΄κΈ°νλλ νμ μμ΄ μ°μλ λ‘κ·Έ μμ±μ΄ μ΄λ€μ§λλ€.)
// ES5
const FolderLogger = require('folder-logger')
// λ‘κ·Έλ₯Ό μ μ₯ν ν΄λμμΉ
const path = `${__dirname}/logs/`
// λ‘κ±° μΈμ€ν΄μ€ μμ±
const logger = new FolderLogger(path)
λ‘κ±° λ©μμ§ μ μ‘
var message = `Lorem ipsum dolor sit amet`
// κΈ°λ³Έ μλ΄ λ©μμ§λ₯Ό μΆλ ₯ν©λλ€.
logger.info(message)
// μμ€ν
λ©μμ§λ₯Ό μΆλ ₯ν©λλ€.
logger.system(message)
// μ£Όμ λ©μμ§λ₯Ό μΆλ ₯ν©λλ€.
logger.warn(message)
// μ€λ₯ λ©μμ§λ₯Ό μΆλ ₯ν©λλ€.
logger.error(message)
// μΉλͺ
μ μ€λ₯ λ©μμ§λ₯Ό μΆλ ₯ν©λλ€.
logger.critical(message)
// λλ²κΉ
μ© λ©μμ§λ₯Ό μΆλ ₯ν©λλ€.
logger.debug(message)
λ‘κ±° λ 벨 λΆλ₯
Folder-Logger μ λ‘κ·Έ λΆλ₯λ μ΄ 6κ°μ§μ΄λ©°, μ΄ 6κ°μ§ λΆλ₯μ 0~5κΉμ§μ μ€μλ λΆλ₯κ° μ‘΄μ¬ν©λλ€.
const level = {
info: 0,
system: 1,
warn: 2,
error: 3,
critical: 4,
debug: 5
}
μμ κ°μ level
κ°μ²΄λ μλμ κ°μ λ°©λ²μΌλ‘ λ‘κ±° μμμ μΈμ λ κ°μ Έμ¬ μ μμ΅λλ€.
// μμ level κ°μ²΄λ₯Ό λ°νν©λλ€.
logger.level()
// level κ°μ²΄μ key κ°λ€μ λ°νν©λλ€.
logger.levelNames()
λ‘κ±° λ 벨 μ€μ
Folder-Logger μλ μ½μμ νμλλ λ‘κ·Έ λ©μμ§μ λ 벨μ μ€μ ν μ μλ κΈ°λ₯μ΄ μμ΅λλ€. κ°λ Ή 3
μ μ€μ ν κ²½μ°, 3
λ³΄λ€ λ ν° λ 벨μ λ‘κ·Έλ μ½μ μμ νμλμ§ μμ΅λλ€. μ€μ λ λ‘κ·Έ λ 벨과 μκ΄μμ΄ νμΌ μμλ μ μμ μΌλ‘ λͺ¨λ λ‘κ·Έκ° κΈ°λ‘ λ©λλ€. (κΈ°λ³Έμ μΌλ‘ μ€μ λ λ‘κ±° λ 벨μ 5
μ
λλ€.)
// μ΄ κ²½μ° debug λ©μμ§λ₯Ό νμνμ§ μκ² λ©λλ€.
logger.setLevel(4)
// μ΄ κ²½μ° info λ©μμ§ λ§μ νμνκ² λ©λλ€.
logger.setLevel(0)
κ³ κΈ μ¬μ© λ°©λ²
λ‘κ±° λ©μμ§ μ΅μ μ μ©
logger.info(`Hello?`, {
noPrint: false, // κΈ°λ³Έ false
noWrite: false // κΈ°λ³Έ false
noFormat: false, // κΈ°λ³Έ false
})
μ΅μ
μ info
, system
, warn
, error
, critical
, debug
λͺ¨λ ν¨μμ λμΌνκ² 2λ²μ§Έ μΈμ κ°μ²΄λ‘ ꡬμ±ν μ μμ΅λλ€. μλμμ ν΄λΉ μ΅μ
μμλ€μ μ€λͺ
ν©λλ€.
noPrint
ν΄λΉ μ΅μ
μ΄ true
λ‘ μ²λ¦¬λλ©΄ μ½μμμ ν΄λΉ λ©μμ§κ° μΆλ ₯λμ§ μμ΅λλ€. ν΄λΉ μ΅μ
μ μ΄μ©ν΄μ νλ©΄μ νμλμ§ μκ³ νμΌμμλ§ κΈ°λ‘λλ λ‘κ·Έλ©μμ§λ₯Ό ꡬνν μ μμ΅λλ€.
noWrite
ν΄λΉ μ΅μ
μ΄ true
λ‘ μ²λ¦¬λλ©΄ νμΌ μμ ν΄λΉ λ©μμ§κ° κΈ°λ‘λμ§ μμ΅λλ€. ν΄λΉ μ΅μ
μ μ΄μ©ν΄μ νλ©΄μλ§ νμλκ³ νμΌμμλ κΈ°λ‘λμ§ μλ λ‘κ·Έλ©μμ§λ₯Ό ꡬνν μ μμ΅λλ€.
noFormat
ν΄λΉ μ΅μ
μ΄ true
λ‘ μ²λ¦¬λλ©΄ ν΄λΉ λ©μμ§μ κΈ°λ³Έ ν
μ€νΈ ν¬λ©§ν
μ μ μ©νμ§ μμ΅λλ€. μ΄λ νμΌμ μ μ₯λλ λ©μμ§μ μ½μ μμ νμλλ λͺ¨λ λ©μμ§μ λμΌν©λλ€. μ΄ μ΅μ
μ μ¬μ©νμ±λ‘ λ‘κ·Έλ₯Ό μ μ₯νκ² λλ©΄ ν΄λΉ λ©μμ§κ° λ°μν μκ°μ΄ κΈ°λ‘λμ§ μμΌλ―λ‘ μ£Όμν΄μ μ¬μ©ν΄ν©λλ€.
λ‘κ±° λ©μμ§ μ μ₯μμΉ λ³κ²½
μλ ν¨μλ₯Ό μ΄μ©ν΄μ λͺ¨λμ΄ μ€ν μ€μ λ‘κ±° λ©μμ§μ μ μ₯ μμΉλ₯Ό λ³κ²½ν μ μμ΅λλ€. κΈ°μ‘΄ λ‘κ·Έ νμΌμ μλμΌλ‘ μμμ λ«νλ©° λ‘κ·Έ ν΄λ κ²½λ‘κ° μ‘΄μ¬νμ§ μλ κ²½μ° μλμΌλ‘ ν΄λκ³μΈ΅κ³Ό νμΌμ΄ μμ±λ©λλ€.
// μλ‘κ² λ‘κ·Έλ₯Ό μ μ₯ν ν΄λ μμΉ
const path = `${__dirname}/logs/`
// λ‘κ·Έ μ μ₯μμΉλ₯Ό λ³κ²½ν©λλ€.
logger.setLogPath(path)
log ν¨μ μ΄μ©
ν¨μλͺ
μ λ 벨 λΆλ₯μ λ°λΌ λ€λ₯΄κ² μ¬μ©νκ³ μΆμ§ μμ κ²½μ°, μλμ κ°μ΄ log ν¨μλ₯Ό μ¬μ©νλ©΄μ μ΅μ
μΌλ‘ λ‘κ·Έ λ 벨μ μ§μ ν΄μ€ μλ μμ΅λλ€. (λ‘κ·Έ λ 벨μ μ§μ νμ§ μμ κ²½μ° info
λ λ²¨μ΄ μλμΌλ‘ μ μ©λ©λλ€.)
logger.log({
level: logger.level.info // 0~5μΌλ‘λ μ
λ ₯κ°λ₯ν©λλ€.
})
컀μ€ν°λ§μ΄μ§ λ°©λ²
λ‘κ·ΈνμΌ νμ₯μ λ³κ²½
κΈ°λ³Έμ μΌλ‘ μ μ₯λλ λ‘κ·ΈνμΌ νμ₯μλ .log
μ
λλ€. λ€λ₯Έ νμ₯μλͺ
μ μ¬μ©νκΈΈ μνλ κ²½μ° μ΄λ₯Ό λ‘κ±° μΈμ€ν΄μ€ μμ±μ 2λ²μ§Έ μΈμ κ°μ²΄λ‘ μ§μ ν μ μμ΅λλ€.
// λ‘κ±° μΈμ€ν΄μ€ μμ±
const logger = new FolderLogger(path, {
ext: `txt` // μ΄ κ²½μ° .txt νμ₯μλ‘ μ μ₯λ©λλ€.
})
λ‘κ·ΈνμΌ μκ°ν¬λ©§ν λ³κ²½
Folder-Logger μμ λ‘κ·ΈνμΌμ μ¬μ©λλ μκ° ν¬λ©§ν
μ moment.js
λͺ¨λμ μμ‘΄νκ³ μμΌλ©°, moment.js
μμ νΈννλ λ μ§ν¬λ©§ν
μΌλ‘ μμ λ‘κ² λ³νν μ μμ΅λλ€. μ¦ λ¬Έμμ΄ ννλ‘ λ μ§ ννλ₯Ό μ§μ ν μ μμ΅λλ€. κΈ°λ³Έμ μΌλ‘ μ§μ λ λ μ§ ν¬λ©§ν
μ YYYY-MM-DD
μ
λλ€.
// λ‘κ±° μΈμ€ν΄μ€ μμ±
const logger = new FolderLogger(path, {
timeFormat: `YYYY-MM-DD` // μ: 2019-02-06
})
λ‘κ·ΈνμΌ μκ°ν¬λ©§ν μ moment.js μ΅μ μ μ©
Folder-Logger μ¬μ© μ€ νμμ‘΄ μ€μ λ± moment(/* μ¬κΈ° */)
ννμ μ§μ μ¬μ©ν΄μΌνλ moment.js
μ΅μ
μ΄ μ‘΄μ¬νλ€λ©΄ λ€μκ³Ό κ°μ΄ μ μ©κ°λ₯ν©λλ€.
// λ‘κ±° μΈμ€ν΄μ€ μμ±
const logger = new FolderLogger(path, {
momentOption: `2090-11-11T11:11:11`
})
λ‘κ·Έ ν μ€νΈ ν¬λ©§ν λ³κ²½
Folder-Logger μ 컀μ€ν°λ§μ΄μ§μ μ¬μ©λλ ν μ€νΈ ν¬λ©§ν μ μ΄μ©μμ μν΄ μμ λ‘κ² μ»€μ€ν°λ§μ΄μ§ λ μ μμ΅λλ€. μ¬μ©λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€.
// ν¬λ©§ν
μ μ¬μ© ν μμνν λͺ¨λμ
λλ€.
const chalk = require('chalk')
// ν¬λ©§ν
ν¨μ (κΈ°λ³Έν¨μλ₯Ό μμλ‘ λλ΄ν©λλ€.)
const myLogFormat = (log, level, logger) => {
let defaultFormat ='%time% %level% \t\b\b\b\b' + '%log%'
let time = moment(logger.momentOption).format('HH:mm:ss')
let levelName = String(logger.levelNames[level]).toUpperCase()
switch(levelName){
case 'CRITICAL':
time = chalk.bgRedBright(chalk.black(time))
levelName = chalk.bgRedBright(chalk.black(levelName))
log = chalk.bgRedBright(chalk.black(log))
break
case 'WARN':
time = chalk.bgYellowBright(chalk.black(time))
levelName = chalk.bgYellowBright(chalk.black(levelName))
log = chalk.bgYellowBright(chalk.black(log))
break
case 'ERROR':
time = chalk.bgRedBright(chalk.white(time))
levelName = chalk.bgRedBright(chalk.white(levelName))
log = chalk.bgRedBright(chalk.white(log))
break
case 'DEBUG':
time = chalk.greenBright(time)
levelName = chalk.greenBright(levelName)
log = chalk.greenBright(log)
break
case 'SYSTEM':
time = chalk.yellowBright(time)
levelName = chalk.yellowBright(levelName)
log = chalk.yellowBright(log)
break
default:
time = chalk.white(time)
levelName = chalk.white(levelName)
log = chalk.white(log)
break
}
let text = defaultFormat
.replace('%time%', time)
.replace('%level%', levelName)
.replace('%log%', log)
return text
}
// λ‘κ±° μΈμ€ν΄μ€ μμ±
const logger = new FolderLogger(path, {
logFormat: myLogFormat
})
λ‘κ³ μμ΄μ½ μΆμ²
License
MIT Licensed.