LANGUAGE/NODEJS

[NODEJS] Logger (Winston)

보겸삼촌 2019. 8. 26. 13:20

- 개발환경

# 개발환경

os : windows10 Pro 64bit

tool : visual studio code

npm : v6.9.0

nodejs : v10.16.0

 

- 목적

 : 테스트 및 디버깅, 통계 등의 사용을 위해 로그를 남기기 위함

 

* 소스 디렉토리

# 소스 디렉토리

[ROOT]

  ㄴ app.js

  ㄴ [config]

     ㄴ dev.js

     ㄴ prod.js  

     ㄴ logger.js

  ㄴ [routes]

     ㄴ router1.js

     ㄴ router2.js

 

 

0. 사전준비

https://bogyum-uncle.tistory.com/71?category=804624

불러오는 중입니다...

 

 

1. Logging을 위한 서드파티 모듈 설치

 

  1.1. winston

  1.2. winston-daily-rotate-file

  1.3. date-utils

 

  

2. logger 세팅

 

  2.1. /appRoot/config 디렉토리에 logger.js 파일 생성

  2.2. /appRoot/config/logger.js

 

const winston = require('winston');
require('winston-daily-rotate-file');
require('date-utils');


const logger = winston.createLogger({
    level: 'info', // log level
    format: winston.format.json(),
    transports: [
        new winston.transports.DailyRotateFile({
            filename : 'log/system.log', // log 폴더에 system.log 이름으로 저장
            zippedArchive: true, // 압축여부
            format: winston.format.printf(
                info => `${new Date().toFormat('YYYY-MM-DD HH24:MI:SS')} [${info.level.toUpperCase()}] - ${info.message}`)
        }),

        //콘솔 출력
        new winston.transports.Console({
            format: winston.format.printf(
                info => `${new Date().toFormat('YYYY-MM-DD HH24:MI:SS')} [${info.level.toUpperCase()}] - ${info.message}`)
        })
    ],
    colorize: true,
    humanReadableUnhandledException: true,
});

//운영중이지 않을 경우 콘솔에 출력 추가
// if (process.env.NODE_ENV !== 'production') {
//     new winston.transports.Console({
//         format: winston.format.printf(
//             info => `${new Date().toFormat('YYYY-MM-DD HH24:MI:SS')} [${info.level.toUpperCase()}] - ${info.message}`)
//     })
// }

module.exports = logger;

 

 

  2.3. logging 확인하기

 

    /appRoot/routes/router1.js

//함수로 만들어 객체 app을 전달
module.exports = function(app){

    var express = require('express');
    var router = express.Router();
    var logger = require('../config/logger');

    router.get("/", function(request, response){
        response.writeHead(200, {"Content-Type":"text/plain; charset=utf-8"});
        response.end("/r1 경로로 접근...!");
        logger.info("logger info test");
        // console.log(response.statusCode);
    });

    router.get("/action", function(request, response){
        response.writeHead(200, {"Content-Type":"text/plain; charset=utf-8"});
        response.end("/r1/action 경로로 접근...!");
        // console.log(response.statusCode);
    });

    //라우터 리턴
    return router;
}

 

  : logger 변수 생성, info 레벨로 내용 작성

 

 

3. 확인

 

  3.1. 브라우저 확인

 

  3.2. 콘솔창 확인

 

  3.3. log 파일 생성 확인

 

 

  3.4. log 파일 내용 보기