μ΄μ 체μ : μ°λΆν¬ 14.04
λ
ΈλJS: 6.2.0
μμ€ν΄: 2.2.0
λ€μ μ½λλ λ‘κ·Έ νμΌμ μμ±νμ§ μμ΅λλ€.
const logger = new Winston.Logger({
level: 'verbose',
transports: [
new Winston.transports.Console({
timestamp: true
}),
new Winston.transports.File({
filename: 'app.log',
timestamp: true
})
]
});
logger.info('Holla');
ν°λ―Έλμ μ κΈ°λ‘λ©λλ€.
2016-05-26T13:11:49.927Z - info: Holla
κ·Έλ¬λ μμ±λ λ‘κ·Έ νμΌμ΄ μμ΅λλ€.
+1
+1
+1
+1
fs.stat()μ λ
Έλ 6μ λ¬Έμ κ° μλ κ² κ°μ΅λλ€.
μ΄λ€ μ΄μ λ‘ μ½λ°± fs.stat()λ₯Ό μ€ννμ§ μμμ΅λλ€.
fs.stat(fullname, function (err, stats) {
if (err) {
if (err.code !== 'ENOENT') {
return self.emit('error', err);
}
return createAndFlush(0);
}
if (!stats || (self.maxsize && stats.size >= self.maxsize)) {
//
// If `stats.size` is greater than the `maxsize` for
// this instance then try again
//
return self._incFile(function() {
checkFile(self._getFile());
});
}
createAndFlush(stats.size);
});
})(this._getFile());
ν΄κ²°λμλμ?
λλμ΄ λ¬Έμ λ₯Ό λ€μκ³Ό κ°μ΄ μ λ κ²½λ‘λ₯Ό μ 곡νμ¬ μμ νμ΅λλ€.
winston.add(winston.transports.File, { filename:
${__dirname}/logs/appError.log })
μ΄κ²μ λλ₯Ό μν΄ μΌνκ³ μμ΅λλ€. λλ .gitignore νμΌ λλ¬Έμ νΈλ¦¬λ³΄κΈ° ν¨ν€μ§μ μ λ°μ΄νΈ λ μ€μ μ μν°μμ νλ‘μ νΈμ νμΌ λλ ν 리μ νμλμ§ μμ μν°μ μ¬μ© μμ€ν΄κ³Ό ν¨κ» νλ‘μ νΈλ₯Ό μ΅κ·Όμ λ¬Έμ κ° μμλμ ... (μ΅μ : μ¨κΈ°κΈ° VCSλ 무μ νμΌ)
_Node 6.2.2 λ° Winston 2.2.0 μ¬μ©._
μνΈ:
'use strict';
let Winston = require('winston');
const logger = new Winston.Logger({
level: 'verbose',
transports: [
new Winston.transports.Console({
timestamp: true
}),
new Winston.transports.File({
filename: 'app.log',
timestamp: true
})
]
});
logger.info('Holla');
{"level":"info","message":"Holla","timestamp":"2016-07-01T19:29:14.035Z"}
μΆλ ₯μ΄ μλ app.log νμΌμ λ§λ€κ³ 2016-07-01T19:29:14.034Z - info: Holla
λ‘ μ½μμ κΈ°λ‘ν©λλ€.
λ°©κΈμ΄ λ¬Έμ κ° λ°μνμ΅λλ€. λλ ν λ¦¬κ° λ¨Όμ μ‘΄μ¬ν΄μΌ ν©λλ€. winstonμ μ νμΌμ μμ±νμ§λ§ μ λλ ν 리λ₯Ό μμ±νμ§ μλ κ²μΌλ‘ 보μ λλ€(μ: logs/app.jsμ μλ νμΌμ λ‘κ·ΈμΈνλ €λ κ²½μ° "logs" λλ ν 리λ₯Ό μμ±ν΄μΌ ν¨)
Wish winstonμ λ‘κ·Έ ν΄λ/λλ ν λ¦¬κ° μ‘΄μ¬νλμ§ νμΈν λ€μ μμνλ λμ λ‘κ·Έ ν΄λ/λλ ν λ¦¬κ° μ‘΄μ¬νμ§ μλ κ²½μ° μμ±ν©λλ€. λλ fsκ° μ΄κ²μ ν μ μλ€κ³ μκ°ν©λκΉ?
+1
+1
+1
if (!fs.existsSync('path') {
fs.mkdirSync('path');
}
http://thisdavej.com/using-winston-a-versatile-logging-library-for-node-js/
λλμ΄ λ¬Έμ κ° μμκ³ μ΄μ€ μ¬λμλ₯Ό μ¬μ©νμ¬ ν΄κ²°νμ΅λλ€.
Logger.loggerInfo = new Winston.Logger({
level: 'info',
transports: [
new Winston.transports.File({
filename: process.cwd() + '\\logs\\info.log',
timestamp: true
})
]
});
λͺ κ°μ§ κ³ κΈ λ‘κΉ
ββλ©μ»€λμ¦(winston ν¬ν¨)μ μ¬μ©νμ¬ μ¬λ¬ ν
μ€νΈλ₯Ό μννμΌλ©° κΉ¨λν μ’
λ£(process.exit(0))λ₯Ό μννλ©΄ λ‘κ±°κ° νμΌμ μΈ μ μλ κ²μΌλ‘ 보μ
λλ€.
κΉ¨λν μΆκ΅¬λ₯Ό μ κ±°νλ©΄ λ¬Έμ κ° ν΄κ²°λ©λλ€.
@fvuilleumier λ§μ΅λλ€. κ°μ¬ν©λλ€. κ·Έλ¬λ μλ₯Ό λ€μ΄ CLI λꡬμμ μ κ±°νλ κ²μ νΈλ¦¬νμ§ μμ΅λλ€. κ·Έλ¬λ process.exitCode = 0
(λλ λͺ¨λ μ½λ)λ₯Ό μ¬μ©νλ©΄ 루νκ° μ μμ μΌλ‘ μλ£λ μ μμΌλ―λ‘ μλ²½νκ² μλν©λλ€.
νμΌμ λ§λλ μμ κ° μμ΅λλ€
const filename = path.join(__dirname, 'created-logfile.log');
const logger = winston.createLogger({
transports: [
new winston.transports.Console(),
new winston.transports.File({ filename })
]
});
@fvuilleumier @nicosommi νμ§λ§ μ€λ₯λ₯Ό κΈ°λ‘ν ν μμ© νλ‘κ·Έλ¨μ μ’ λ£νλ €λ©΄ μ΄λ»κ² ν©λκΉ? λΉμ μ μ£Όλ³ μ°μ± μ μ°Ύμ μ μμλμ?
@danbrownbox νλ£¨κ° λλλ©΄ js μ€ν¬λ¦½νΈλ λλ λκΉμ§ μ€νλλ νμΌμΌ λΏμ λλ€. λ°λΌμ νΉμ λΌμΈ μ΄νμ μ ν리μΌμ΄μ μ μ’ λ£νλ €λ©΄ ν¨μμμ μ μ ν μ€ν νλ¦μ λΉλνκΈ°λ§ νλ©΄ λ©λλ€.
λ΄ Macμμλ μλ κ²½λ‘κ° μλνμ§ μμ§λ§ μ λ κ²½λ‘κ° μ 곡λλ©΄ νμΌμ μμ±ν©λλ€.
μ λλ₯Ό μ¬μ©νλ μλλ₯Ό μ¬μ©νλ κ·Έκ²μ μ€μνμ§ μμ΅λλ€. λμ μΌλ‘ μ μ‘μ μΆκ°ν λ μλνμ§ μμ΅λλ€.
function createLogFile(appName) {
pathUtils.ensureDirectoryExists('logs');
pathUtils.ensureDirectoryExists(`logs/${appName}`);
winston.add(winston.transports.File, {
level: 'debug',
//filename: `logs/${appName}/export-${Date.now()}.log`,
//filename: `${__dirname}/logs/${appName}/export-${Date.now()}.log`,
filename: `${process.cwd()}/logs/${appName}/export-${Date.now()}.log`,
json: false,
formatter: _formatLog()
});
}
κ·Έλ¬λ createLogger()
μ μ΄ μ μ‘μ μΆκ°νλ©΄ μ λμ μΌλ‘ μλν©λλ€.
μ΄ λ΅λ³ μ μ μκ² ν¨κ³Όμ μ
λλ€.
λ΄ μ½λλ λ€μκ³Ό κ°μ΅λλ€.
````
const μμ€ν΄ = μꡬ('μμ€ν΄');
const logDir = 'λ‘κ·Έ';
const fs = μꡬ('fs');
if (!fs.existsSync(logDir)) {
fs.mkdirSync(logDir);
}
const λ‘κ±° = winston.createLogger({
λ 벨: 'μ 보',
νμ: winston.format.json(),
exitOnError: κ±°μ§,
μμ‘: [
new (require('winston-daily-rotate-file'))({
νμΌ μ΄λ¦: ${logDir}/logs.log
,
λ μ§ ν¨ν΄: 'YYYY-MM-DD-HH',
zippedArchive: μ¬μ€,
λ 벨: 'λ°λ³΄'
}),
new (require('winston-daily-rotate-file'))({
νμΌ μ΄λ¦: ${logDir}/errors.log
,
λ μ§ ν¨ν΄: 'YYYY-MM-DD-HH',
zippedArchive: μ¬μ€,
μμ€: 'μ€λ₯'
})
],
});
λ΄λ³΄λ΄κΈ° {λ‘κ±°};
logger.silli('λ°λ³΄ ν
μ€νΈ');
logger.info('μ 보 ν
μ€νΈ');
logger.warn('κ²½κ³ ν
μ€νΈ');
logger.error('μ€λ₯ ν
μ€νΈ');
````
μ λ μ΄ λ¬Έμ μ μμ μμ λλ€(λ€λ₯Έ κ³μ ). λ€μ λμμμ΅λλ€... κ°μ λ¬Έμ κ° μλλ° μ΄λ»κ² ν΄κ²°νλμ§ μμ΄λ²λ Έμ΄μ π€£
μ΅μ [email protected]
μμ΅λκΉ? λΉμ μ΄ λ‘κ·Έ νμΌμ΄ μνλ μμΉλ₯Ό νμΈ λλ ν λ¦¬κ° μ‘΄μ¬ νμ΅λκΉ ( winston
μ°λ¦¬λ PRμ΄ μμμ λ°μ λ€μΌ κ±°λΌκ³ νμ§λ§, λΉμ μ μν΄ DIRSμ μμ±νμ§ μμ΅λλ€ μ΅μ
λλ κΈ°λ³Έ λμ). λ€μ κ°λν μ μκ² λλ©΄ μ΄ μ€λλ λ¬Έμ λ₯Ό λ«μμΌ ν κ² κ°μ΅λλ€. :)
μ¬κ° μκ°μ PRμ ν μν₯μ΄ μμΌλ 맑겨주μΈμ π
λ©μλ! π μ΄κ²μ λ«μΌλ©΄ #1465 μμ λλ ν 리 νλͺ©μ μΆμ ν μ μμ΅λλ€. master
μ λν΄ λ³λμ λ¬Έμ λ₯Ό ν
μ€νΈνκ³ λ¬Έμ κ° μ§μλλ©΄ μ λ¬Έμ λ‘ μ΄μ΄μΌ ν©λλ€. κ°μ¬ ν΄μ!
κ°μ₯ μ μ©ν λκΈ
λ°©κΈμ΄ λ¬Έμ κ° λ°μνμ΅λλ€. λλ ν λ¦¬κ° λ¨Όμ μ‘΄μ¬ν΄μΌ ν©λλ€. winstonμ μ νμΌμ μμ±νμ§λ§ μ λλ ν 리λ₯Ό μμ±νμ§ μλ κ²μΌλ‘ 보μ λλ€(μ: logs/app.jsμ μλ νμΌμ λ‘κ·ΈμΈνλ €λ κ²½μ° "logs" λλ ν 리λ₯Ό μμ±ν΄μΌ ν¨)