node.js 에서 log 를 관리하는 여러 모듈이 있는데 그중 범용적으로 많이 쓰이는 winston 과 jsnlog 모듈에 대해 소개한다.


Winston 은 nodejs의 server-side 에서 많이 사용하는 로그모듈이다.

  • Multiple transports 라는 개념으로 로그를 레벨별로 다양하게 분리하거나 Console출력, 파일이나 DB에 저장, Remote(Http) 전송등의 기능을 제공한다.
var logger = new (winston.Logger)({
  transports: [
    new (winston.transports.File)({
      name: 'info-file',
      filename: 'filelog-info.log',
      level: 'info'
    }),
    new (winston.transports.File)({
      name: 'error-file',
      filename: 'filelog-error.log',
      level: 'error'
    })
  ]
});

Jsnlog 는 Client의 로그를 Server에 전달하여 Server에서 Server와 Client의 로그를 모두 관리 할 수 있는 기능을 제공한다.

  • C#, PHP, Nodejs 서버와 연동가능
  • Client 로그를 AJAX를 이용하로 서버로 전송가능
  • Winston의 Transport 모듈과 연동가능
    • Server Side(app.js)
    • var winston = require('winston');
      var JL = require('jsnlog').JL;
       var consoleAppender = new (winston.transports.Console)();
      var fileAppender = new winston.transports.File({ json: false, filename: 'filelog.log' });
      JL().setOptions({ appenders: [ consoleAppender, fileAppender ] });
      
    • Client Side(logger.js)
    • var ajaxAppender = JL.createAjaxAppender('ajaxAppender');
      var consoleAppender = JL.createConsoleAppender('consoleAppender');
      JL().setOptions({'appenders': [ajaxAppender, consoleAppender]});
      
  • API
    • Logger Name
      • Logger 생성시 인자로 Logger의 Name을 줄수 있다.
      • JL("MyLogger").warn("log message");
        
    • Log Level 지정가능
    • LOG
      • log(level: number, logObject: any): Logger
        • 일반적인 log API와 다르게 첫번째 인자로 level을 숫자로 넣어주어야 한다.
        • Numeric Severities
        • From Named Severity
          To Numeric Severity
          TRACE1000
          DEBUG2000
          INFO3000
          WARN4000
          ERROR5000
          FATAL6000
  • jsnlog-nodejs
    • Client에서 전송한 로그를 파싱하여 서버에 전송하는 모듈


Posted by leechwin