>웹 프론트엔드 >JS 튜토리얼 >nodejs 로깅 모듈 Winston을 사용하는 방법

nodejs 로깅 모듈 Winston을 사용하는 방법

php中世界最好的语言
php中世界最好的语言원래의
2018-06-01 11:45:551444검색

이번에는 nodejs 로그 모듈 윈스턴을 사용하는 방법과 nodejs 로그 모듈 윈스턴을 사용할 때 주의사항은 무엇인지 알려드리겠습니다. 다음은 실제 사례입니다.

winston 로그 모듈

nodejs winston 모듈과 두 개의 관련 모듈을 사용하면 절반의 노력으로 두 배의 결과를 얻을 수 있습니다.

  1. express-winston

  2. winston-daily-rotate-file

express-winston

은 express-winston의 winston에 추가된 버전으로, express의 middleware로 로그를 인쇄하는 데 사용됩니다. , 요청 헤더 정보뿐만 아니라 응답 시간도 포함됩니다.
미들웨어인데 왜 응답시간이 있나요? express-winston은 express의 res.end 메소드를 다시 작성하므로 요청이 완료된 후 로그가 생성됩니다.

코드 조각

var end = res.end;
res.end = function(chunk, encoding) {
 res.responseTime = (new Date) - req._startTime;
 res.end = end;
 res.end(chunk, encoding);
 ...
 }

express-winston은 Winston의 전송을 수정하거나 확장하지 않으며, winston-daily-rotate-file은 단지 Winston의 전송 방법을 향상시킵니다.

winston-daily-rotate-file

winston-daily -rotate- 파일은 Winston의 확장으로, Winston이 로그를 회전할 수 있도록 전송 방법을 추가합니다.

과 함께 사용하면 요구 사항이 있습니다: 로그를 인쇄할 때 express-winston이 요청 매개변수 및 인터페이스 /api의 응답 데이터도 인쇄하도록 하려면 어떻게 해야 합니까?

  1. 로그 미들웨어는 콜 체인 API 뒤, api/* 비즈니스 처리 앞에 있어야 합니다. 좋아요: app.use('/api', apiRequestLogger, apiHandler)

  2. 응답 데이터를 얻으려면 비즈니스가 처리된 후 전송한 후에만 캡처할 수 있습니다. 여기에서 응답 데이터를 캡처할 수 있습니다

코드는 다음과 같습니다

import winston from 'winston'
import expressWinston from 'express-winston'
import 'winston-daily-rotate-file'
import path from 'path'
export let DailyRotateFileTransport = (fileName) => {
 return new (winston.transports.DailyRotateFile)({
 filename: path.join(process.env.LOGPATH, `${fileName}-%DATE%.log`),
 datePattern: 'YYYY-MM-DD-HH',
 // maxSize: '20m',
 maxFiles: '7d',
 timestamp: () => new Date().format('yyyy-MM-dd hh:mm:ss.S')
 })
}
export let pageRequestLogger = expressWinston.logger({
 transports: [
 DailyRotateFileTransport('page-request')
 ],
 meta: true, // optional: control whether you want to log the meta data about the request (default to true)
 msg: 'HTTP {{req.method}} {{req.url}}', // optional: customize the default logging message. E.g. "{{res.statusCode}} {{req.method}} {{res.responseTime}}ms {{req.url}}"
 expressFormat: true, // Use the default Express/morgan request formatting. Enabling this will override any msg if true. Will only output colors with colorize set to true
 colorize: false, // Color the text and status code, using the Express/morgan color palette (text: gray, status: default green, 3XX cyan, 4XX yellow, 5XX red).
 ignoreRoute: function (req, res) {
 // 只打印页面请求信息
 let notPageRequest = false
 let ignoreArr = ['/api', '.js', '.css', '.png', '.jpg', '.gif']
 ignoreArr.forEach(item => {
  if (req.url.indexOf(item) > -1) notPageRequest = true
 })
 return notPageRequest
 } // optional: allows to skip some log messages based on request and/or response
})
export let apiRequestLogger = (req, res, next) => {
 let send = res.send
 let content = ''
 let query = req.query || {}
 let body = req.body || {}
 res.send = function () {
 content = arguments[0]
 send.apply(res, arguments)
 }
 expressWinston.logger({
 transports: [
  DailyRotateFileTransport('api-request')
 ],
 meta: true, // optional: control whether you want to log the meta data about the request (default to true)
 msg () {
  return `HTTP ${req.method} ${req.url} query ${JSON.stringify(query)} body ${JSON.stringify(body)} resData ${content} `
 },
 colorize: true, // Color the text and status code, using the Express/morgan color palette (text: gray, status: default green, 3XX cyan, 4XX yellow, 5XX red).
 ignoreRoute: function (req, res) {
  if (req.headers.self) return true
  return false
 } // optional: allows to skip some log messages based on request and/or response
 })(req, res, next)
}

이 기사의 사례를 읽은 후 방법을 마스터했다고 믿습니다. 더 흥미로운 정보를 보려면 PHP 중국어의 다른 관련 기사를 주목하십시오. 웹사이트!

추천 자료:

문자열에 포함된 내용을 결정하기 위해 JS를 사용하는 방법 요약

JS+HTML5 마우스 이벤트의 실제 결합 입자 애니메이션

위 내용은 nodejs 로깅 모듈 Winston을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.