Node.js 로깅


177

Node.Js 애플리케이션에서 로깅을 처리하는 데 도움이되는 라이브러리가 있습니까? 내가하고 싶은 것은 모든 로그를 파일에 쓰고 싶습니다. 또한 특정 크기 또는 날짜 후에 파일을 롤아웃하는 것과 같은 옵션이 필요합니다.


log4js im을 통합하여 모든 구성 세부 정보를 하나의 파일로 유지하고 다른 응용 프로그램 파일의 메소드 만 사용하여 유지 보수를 쉽게했습니다. 그러나 예상대로 작동하지 않습니다. 여기 내가하려는 일이 있습니다.

var log4js = require('log4js'); 
log4js.clearAppenders()
log4js.loadAppender('file');
log4js.addAppender(log4js.appenders.file('test.log'), 'test');
var logger = log4js.getLogger('test');
logger.setLevel('ERROR');


var traceLogger = function (message) {
        logger.trace('message');
    };

var errorLogger = function (message) {
        logger.trace(message);
    };


exports.trace = traceLogger;
exports.error = errorLogger;

이 파일을 다른 파일에 포함시키고 시도했습니다.

log.error ("Hello Error Message");

그러나 작동하지 않습니다. 이것에 문제가 있습니까?


1
log4js는 괜찮은 것 같습니다. 오류 수준을 잘못 설정했습니다. logger.setLevel (log4js.levels.ERROR);
Boklucius

답변:


196

윈스턴 은 꽤 좋은 로깅 라이브러리입니다. 파일을 사용하여 로그를 파일에 쓸 수 있습니다.

코드는 다음과 같습니다.

var winston = require('winston');

var logger = new (winston.Logger)({
  transports: [
    new (winston.transports.Console)({ json: false, timestamp: true }),
    new winston.transports.File({ filename: __dirname + '/debug.log', json: false })
  ],
  exceptionHandlers: [
    new (winston.transports.Console)({ json: false, timestamp: true }),
    new winston.transports.File({ filename: __dirname + '/exceptions.log', json: false })
  ],
  exitOnError: false
});

module.exports = logger;

그런 다음 다음과 같이 사용할 수 있습니다.

var logger = require('./log');

logger.info('log to file');

5
@TravisWebb-github.com/ flatiron / winston/ issues / 294 & github.com/flatiron/winston/issues/280
ostergaard

3
윈스턴을 오랫동안 사용했습니다. 그것은 버그가있어서 npmlog를 선호하여 버렸습니다.
airportyh

8
@everyone, winston이 다시 유지되고있는 것 같습니다 ... github.com/flatiron/winston/network
Daithí

간단한 참고 사항 : 색상이 지정된 명령 줄 출력에 대해서는 위 예제에서 logger.cli ()를 호출하십시오.
Duncan

1
Winston은 .json 파일에서 구성을 정의하고 읽을 수 없습니다. 불쌍한 디자인, imo.
miniml

59

Scribe.JS 경량 로거

나는 많은 로거를 살펴 보았고 가벼운 솔루션을 찾을 수 없었으므로 github에 게시 된 간단한 솔루션을 만들기로 결정했습니다.

  • 사용자, 날짜 및 레벨별로 구성된 파일을 저장합니다
  • 당신에게 아름다운 결과를 제공합니다 (우리 모두는 그것을 좋아합니다)
  • 사용하기 쉬운 HTML 인터페이스

이것이 도움이되기를 바랍니다.

온라인 데모

http://bluejamesbond.github.io/Scribe.js/

로그에 대한 안전한 웹 액세스

ㅏ

콘솔에 예쁜 텍스트를 인쇄합니다!

ㅏ

웹 액세스

ㅏ

깃 허브

https://github.com/bluejamesbond/Scribe.js


5
이 라이브러리는 더 이상 유지되지 않습니다 : github.com/bluejamesbond/...
사이먼 Meusel

30

Log4js 는 nodejs 애플리케이션에 가장 많이 사용되는 로깅 라이브러리 중 하나입니다.

그것은 많은 멋진 기능을 지원합니다 :

  1. 컬러 콘솔 로깅
  2. 노드의 console.log 기능 교체 (선택 사항)
  3. 파일 크기에 따라 로그 롤링이있는 파일 어 펜더
  4. SMTP, GELF, hook.io, Loggly 어 펜더
  5. 다중 프로세스 어 펜더 (작업자 프로세스가있을 때 유용함)
  6. 연결 / 익스프레스 서버용 로거
  7. 구성 가능한 로그 메시지 레이아웃 / 패턴
  8. 다른 로그 범주에 대한 다른 로그 수준 (앱 로그의 일부를 DEBUG로, 다른 일부는 오류 등으로 만들기)

예:

  1. 설치: npm install log4js

  2. 구성 ( ./config/log4js.json) :

    {"appenders": [
        {
            "type": "console",
            "layout": {
                "type": "pattern",
                "pattern": "%m"
            },
            "category": "app"
        },{
            "category": "test-file-appender",
            "type": "file",
            "filename": "log_file.log",
            "maxLogSize": 10240,
            "backups": 3,
            "layout": {
                "type": "pattern",
                "pattern": "%d{dd/MM hh:mm} %-5p %m"
            }
        }
    ],
    "replaceConsole": true }
  3. 용법:

    var log4js = require( "log4js" );
    log4js.configure( "./config/log4js.json" );
    var logger = log4js.getLogger( "test-file-appender" );
    // log4js.getLogger("app") will return logger that prints log to the console
    logger.debug("Hello log4js");// store log in file


6

"logger.setLevel ( 'ERROR');" 문제의 원인입니다. 이유를 이해하지 못하지만 "ALL"이외의 것으로 설정하면 파일에 아무것도 인쇄되지 않습니다. 나는 조금 주위를 찌르고 코드를 수정했다. 그것은 나를 위해 잘 작동합니다. 두 개의 파일을 만들었습니다.

logger.js

var log4js = require('log4js');
log4js.clearAppenders()
log4js.loadAppender('file');
log4js.addAppender(log4js.appenders.file('test.log'), 'test');
var logger = log4js.getLogger('test');
logger.setLevel('ERROR');

var getLogger = function() {
   return logger;
};

exports.logger = getLogger();

logger.test.js

var logger = require('./logger.js')

var log = logger.logger;

log.error("ERROR message");
log.trace("TRACE message");

"node logger.test.js"를 실행하면 test.log 파일에 "ERROR message"만 표시됩니다. 레벨을 "TRACE"로 변경하면 test.log에 두 줄이 모두 인쇄됩니다.


2
logging.apache.org/log4j/1.2/manual.html 로거에는 레벨이 할당 될 수 있습니다. 가능한 레벨 세트 (즉, TRACE, DEBUG, INFO, WARN, ERROR 및 FATAL) 로깅 요청 레벨이 로거 레벨보다 높거나 같으면 로깅 요청이 사용 가능하다고합니다. 그렇지 않으면 요청이 비활성화되었다고합니다.
Shawn C.

3

Winston은 대부분의 개발자에게 강력한 선택입니다. 나는 윈스턴을 오랫동안 사용 해왔다. 최근에 응용 프로그램 로깅을 다음 단계로 가져 오는 papertrail과 함께 winston을 사용했습니다.

그들의 사이트에서 멋진 스크린 샷입니다.

여기에 이미지 설명을 입력하십시오

유용한 방법

  • 한 곳에서 다른 시스템의 로그를 관리 할 수 ​​있습니다. 이것은 두 개의 백엔드 통신이 있고 두 위치에서 로그를 볼 수있을 때 매우 유용합니다.

  • 통나무가 살아 있습니다. 프로덕션 서버의 실시간 로그를 볼 수 있습니다.

  • 강력한 검색 및 필터링

  • 로그에 특정 텍스트가있는 경우 전자 메일을 보내도록 경고를 만들 수 있습니다.

더 많은 http://help.papertrailapp.com/kb/how-it-works/event-viewer/를 찾을 수 있습니다

간단한 구성을 사용하여 winston, winston-express그리고 winston-papertrail노드 모듈.

import winston from 'winston';
import expressWinston from 'express-winston';
//
// Requiring `winston-papertrail` will expose
// `winston.transports.Papertrail`
//
require('winston-papertrail').Papertrail;
// create winston transport for Papertrail
var winstonPapertrail = new winston.transports.Papertrail({
  host: 'logsX.papertrailapp.com',
  port: XXXXX
});
app.use(expressWinston.logger({
  transports: [winstonPapertrail],
  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: 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) { return false; } // optional: allows to skip some log messages based on request and/or response
}));

누군가가 자신의 로그를 관리하는 데 도움이되기를 바랍니다.


1
이것은 여전히 ​​작동하지만 winston을 v3으로 업그레이드 한 후 "Papertrail은 레거시 winston 전송입니다. 업그레이드를 고려하십시오"라는 경고가 표시됩니다. 현재 미해결 수송으로 업그레이드되었습니다.
Jim Jimson

2

간단한 로깅을 위해 'nodejslogger'모듈을 사용할 수 있습니다. 3 가지 레벨의 로깅 (INFO, ERROR, DEBUG)이 있습니다.

var logger = require('nodejslogger')
logger.init({"file":"output-file", "mode":"DIE"})

D : 디버그, I : 정보, E : 오류

logger.debug("Debug logs")
logger.info("Info logs")
logger.error("Error logs")

모듈은 https://www.npmjs.com/package/nodejslogger 에서 액세스 할 수 있습니다.


0

관찰 errorLogger는 주위의 래퍼입니다 logger.trace가 . 그러나 로거 레벨은 ERROR 이므로 logger.trace 는 메시지를 로거 의 appender 에 기록 하지 않습니다 .

수정 프로그램을 변경하는 것입니다 logger.trace을logger.error 의 본문에 errorLogger .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.