Node.js 라이브러리 Winston을 사용하여 로그에 타임 스탬프를 추가하려면 어떻게해야합니까?
로그에 타임 스탬프를 추가하고 싶습니다. 이를 달성하는 가장 좋은 방법은 무엇입니까?
나도 같은 문제를 다루고 있었다. 두 가지 방법이 있습니다.
Winston을 포함하면 일반적으로 콘솔 전송을 추가하는 것이 기본값입니다. 이 기본 케이스에서 타임 스탬프가 작동하도록하려면 다음 중 하나가 필요했습니다.
- 콘솔 전송을 제거하고 타임 스탬프 옵션으로 다시 추가하십시오.
- 타임 스탬프 옵션을 true로 설정하여 고유 한 Logger 개체를 만듭니다.
첫번째:
var winston = require('winston');
winston.remove(winston.transports.Console);
winston.add(winston.transports.Console, {'timestamp':true});
두 번째, 깔끔한 옵션 :
var winston = require('winston');
var logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)({'timestamp':true})
]
});
다른 콘솔 전송 옵션은 여기 에서 찾을 수 있습니다 .
- level :이 전송이 기록해야하는 메시지 수준 (기본값 'debug').
- silent : 출력을 억제할지 여부를 나타내는 부울 플래그 (기본값 false).
- colorize : 출력을 색상 화해야하는지 여부를 나타내는 부울 플래그 (기본값 false).
- timestamp : 출력 앞에 타임 스탬프를 추가해야하는지 여부를 나타내는 부울 플래그 (기본값 false). 함수가 지정되면 타임 스탬프 대신 반환 값이 사용됩니다.
위의 답변은 저에게 효과적이지 않았습니다. 최신 버전의 Winston-3.0.0-rc1을 사용하여 로그에 타임 스탬프를 추가하려는 경우, 이것은 매력처럼 작동했습니다.
const {transports, createLogger, format} = require('winston');
const logger = createLogger({
format: format.combine(
format.timestamp(),
format.json()
),
transports: [
new transports.Console(),
new transports.File({filename: 'logs/error/error.log', level: 'error'}),
new transports.File({filename: 'logs/activity/activity.log', level:'info'})
]
});
나는 'format.combine ()'을 사용했습니다. 모든 트랜스 포트에 타임 스탬프가 필요했기 때문에 각 트랜스 포트 내부가 아닌 createLogger 내에 포맷 옵션을 추가했습니다. 콘솔 및 파일 (activity.log)의 출력은 다음과 같습니다.
{"message":"Connected to mongodb","level":"info","timestamp":"2018-02-01T22:35:27.758Z"}
{"message":"Connected to mongodb","level":"info","timestamp":"2018-02-01T22:35:27.758Z"}
다음을 사용하여 평소와 같이 'format.combine ()'에서이 타임 스탬프에 서식을 추가 할 수 있습니다.
format.timestamp({format:'MM-YY-DD'})
You can use built-in util and forever to achieve logging with timestap for your nodejs server. When you start a server add log output as part of the parameter:
forever start -ao log/out.log server.js
And then you can write util in your server.js
server.js
var util = require('util');
util.log("something with timestamp");
The output will look something like this to out.log file:
out.log
15 Mar 15:09:28 - something with timestamp
We can do like this also
var winston = require('winston');
const { createLogger, format, transports } = require('winston')
var config = require('../configurations/envconfig.js');
var loggerLevel = process.env.LOGGERLEVEL || config.get('LOGGERLEVEL');
var logger = winston.createLogger({ format: format.combine(
format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss'
}),
format.printf(info => `${info.timestamp} ${info.level}: ${info.message}`+(info.splat!==undefined?`${info.splat}`:" "))
),
transports: [
new (winston.transports.Console)({ level: loggerLevel }),
]
});
module.exports = logger;
Although I'm not aware of winston, this is a suggestion. I use log4js for logging & my logs by default look like this
[2012-04-23 16:36:02.965] [INFO] Development - Node Application is running on port 8090
[2012-04-23 16:36:02.966] [FATAL] Development - Connection Terminated to '127.0.0.1' '6379'
Development is the environment of my node process & [INFO|FATAL] is log level
Maintaining different profiles for logging is possible in log4js. I have Development & Production profiles. Also there are logger types like rolling file appender, console appender, etc. As a addon your log files will be colorful based on the log level [Trace, Info, Debug, Error, Fatal] ;)
log4js will override your console.log
It is a configurable parameter now in 0.5+
Sometimes default timestamp format can be not convenient for you. You can override it with your implementation.
Instead of
var winston = require('winston');
var logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)({'timestamp':true})
]
});
you can write
var winston = require('winston');
var logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)({
'timestamp': function() {
return <write your custom formatted date here>;
}
})
]
});
See https://github.com/winstonjs/winston#custom-log-format for the details
we could use console-stamp to add timestamp and log level to the existing console: require('console-stamp')(console, '[yyyy-mm-dd HH:MM:ss.l]')
See https://github.com/starak/node-console-stamp for the details
또 다른 해결책은 logger.info (), logger.error () 등과 같은 일부 함수를 내보내는 파일로 로거를 래핑 한 다음 모든 메시지 로그에 보낼 추가 키를 전달하는 것입니다.
loggerService.js
const logger = winston.createLogger({ ... })
function handleLog(message, level) {
const logData = {
timestamp: Date.now(),
message,
}
return logger[level](logData)
}
function info(message) {
handleLog(message, 'info')
}
function error(message) {
handleLog(message, 'error')
}
function warn(message) {
handleLog(message, 'warn')
}
module.exports = {
info,
error,
warn
}
whatever-file.js
const logger = require('./services/loggerService')
logger.info('Hello World!')
your-log.log
{"timestamp":"2019-08-21 06:42:27","message":"Hello World!","level":"info"}
'program story' 카테고리의 다른 글
Actionscript 3을 사용하여 ByteArray 언로드 (0) | 2020.09.22 |
---|---|
C ++에 기본 클래스가없는 이유는 무엇입니까? (0) | 2020.09.21 |
이해하기 쉬운 설명으로 Java에서 실행 가능이란 무엇입니까? (0) | 2020.09.21 |
할당 된 메모리에서 free ()를 사용하지 * 않아도 * 괜찮습니까? (0) | 2020.09.21 |
머티리얼 아이콘을 오프라인으로 호스팅하는 방법은 무엇입니까? (0) | 2020.09.21 |