더 나은 로깅을 위해 시도할 수 있는 9개의 Node.js 로거 라이브러리

코드 디버깅에 어려움을 겪고 계십니까? 디버깅을 더 쉽게 만들 수 있는 로깅 솔루션을 찾고 있습니까? 자세히 알아보려면 계속 읽어보세요.

소프트웨어 개발은 ​​요구 사항 수집, 분석, 코딩, 테스트 및 유지 관리와 같은 여러 단계를 거칩니다. 이 모든 단계 중 코딩/개발 단계에는 많은 시간과 노력이 필요합니다. 소프트웨어 엔지니어는 구문 오류, 논리적 오류 및 런타임 오류를 처리합니다. 구문 오류는 컴파일 시간에 식별되며 코드가 프로그래밍 언어의 규칙을 따르지 않기 때문에 발생합니다.

반면에 논리적 오류 및 런타임 오류는 IDE(통합 개발 환경)에서 식별할 수 없으며 디버그 및 수정이 어려운 경우가 많습니다. 버그를 해결하는 것은 시간이 많이 걸리는 프로세스이며 많은 디버깅이 필요합니다.

디버깅은 작성된 코드가 예상대로 작동하지 않는 이유를 이해하려고 시도하는 프로세스입니다. 오류가 발생한 코드의 정확한 행과 실수를 알면 문제를 쉽게 해결할 수 있습니다. 따라서 로깅은 코드 디버깅에 매우 유용합니다.

로깅이란 무엇입니까?

로깅은 프로그램 실행 중에 메시지를 캡처하는 기술입니다. 디버깅에 도움이 될 수 있는 해당 메시지만 기록해야 합니다. 따라서 코드에 로그 문을 추가할 때를 아는 것은 매우 중요합니다. 또한 로그 문을 구별하는 것도 똑같이 중요합니다. 정보, 경고, 오류, 디버그 및 자세한 정보와 같은 로깅에는 다양한 수준이 있습니다. 오류 및 경고 문은 예외 처리에 사용됩니다.

함수에서 반환된 데이터, 배열 조작 후 결과, API에서 검색된 데이터 등은 정보 문을 사용하여 기록할 수 있는 데이터의 몇 가지 예입니다. 디버그 및 상세 로그는 오류에 대한 자세한 설명을 제공하는 데 사용됩니다.

디버그 로그는 스택 추적, 입출력 매개변수 등에 대한 정보를 제공합니다. “자세한 정보”는 “디버그” 로그만큼 상세하지 않지만 발생한 모든 이벤트의 목록을 제공합니다. 로그는 콘솔, 파일 및 출력 스트림에 기록됩니다. 로그 관리 도구는 구조화되고 형식화된 로깅에 사용할 수 있습니다.

Node.js 로깅

Nodejs는 자바스크립트 런타임 환경입니다. Node.js 애플리케이션은 비동기식이며 비차단식이며 데이터 집약적인 실시간 시스템에서 사용됩니다. Node.js에 대해 자세히 알아보는 가장 좋은 방법은 Node.js 자습서와 설명서를 살펴보는 것입니다. 성능 향상, 문제 해결 및 오류 추적을 위해 로깅이 필요합니다. Node.js에 로그인은 내장 기능 console.log를 사용하여 수행할 수 있습니다. 또한 디버그 기능은 여러 패키지와 연동되어 효율적으로 사용할 수 있습니다.

미들웨어는 요청 및 응답을 관리하는 데 사용됩니다. 미들웨어는 애플리케이션 또는 기타 자바스크립트 프레임워크일 수 있습니다. 미들웨어 로그인은 애플리케이션과 라우터를 통해 수행할 수 있습니다. 모든 Node.js 로거는 npm 또는 yarn install 명령을 사용하여 로거를 설치해야 합니다.

Npm은 “Node Package Manager”의 약자이고 YARN은 “Yet Another Resource Negotiator”의 약자입니다. 그러나 Yarn은 더 빠르고 패키지를 병렬로 설치하므로 npm보다 선호됩니다.

최고의 Node.js 로거 중 일부는 다음과 같습니다.

피노

Pino는 Node.js 애플리케이션을 위한 최고의 로거 중 하나인 라이브러리입니다. 오픈 소스이며 매우 빠르며 읽기 쉬운 JSON 형식으로 명령문을 기록합니다. 일부 Pino 로그 수준은 디버그, 경고, 오류 및 정보 메시지입니다. Pino 로거 인스턴스를 프로젝트로 가져올 수 있으며 console.log 문은 logger.info 문으로 대체되어야 합니다.

  드라이버 IRQL이 작거나 같지 않은 Rtwlane Sys 오류 수정

다음 명령을 사용하여 Pino를 설치합니다.

$ npm install pino   

생성된 로그는 JSON 형식으로 정교하고 로그의 줄 번호, 로그 유형, 기록된 시간 등을 강조 표시합니다. Pino는 애플리케이션에서 최소한의 오버헤드 로깅을 유발하며 로그를 처리하는 동안 매우 유연합니다.

Pino는 Hapi, Restify, Express 등과 같은 웹 프레임워크와 통합될 수 있습니다. Pino에서 생성된 로그는 파일에 저장할 수도 있습니다. 작업자 스레드를 사용하여 작업하고 TypeScript와 호환됩니다.

윈스턴

Winston은 유연성과 확장성에 중점을 두고 다양한 웹 프레임워크에 대한 로깅을 지원합니다. 여러 종류의 전송을 지원하고 다양한 파일 위치에 로그를 저장할 수 있습니다. 전송은 로그 메시지가 저장되는 위치입니다.

Http, 콘솔, 파일 및 스트림과 같은 일부 기본 제공 전송과 함께 Cloud watch 및 MongoDB와 같은 다른 전송을 지원합니다. 다양한 수준과 형식으로 로깅을 수행합니다. 로깅 수준은 문제의 심각도를 나타냅니다.

다양한 로깅 수준은 다음과 같습니다.

{
  error: 0,
  warn: 1,
  info: 2,
  http: 3,
  verbose: 4,
  debug: 5,
  silly: 6
}

로그 출력 형식은 사용자 정의, 필터링 및 결합할 수도 있습니다. 로그에는 타임스탬프, 로그와 연결된 레이블, 이전 로그에서 경과된 밀리초 등에 대한 정보가 포함됩니다.

Winston은 또한 예외와 잡히지 않은 약속도 처리합니다. 쿼리 런타임 파일링, 스트리밍 로그 등과 같은 추가 기능을 제공합니다. 먼저 Winston을 설치해야 합니다. 그런 다음 전송과 함께 Winston 구성 개체가 로그를 저장하기 위해 생성됩니다. 로거 객체는 createLogger() 함수를 사용하여 생성되고 로그 메시지가 전달됩니다.

노드 번연

Bunyan은 JSON 형식의 node.js에서 빠른 로그인에 사용됩니다. 또한 로그를 보기 위한 CLI(명령줄 인터페이스) 도구를 제공합니다. 가볍고 Node.js, Browserify, WebPack, NW.js와 같은 다양한 런타임 환경을 지원합니다. 예쁜 인쇄 기능을 사용하여 로그의 JSON 형식을 더욱 아름답게 합니다. 로그에는 치명적, 오류, 경고, 정보, 디버그 및 추적과 같은 다양한 수준이 있습니다. 각각은 숫자 값과 연결됩니다.

인스턴스에 대해 설정된 수준 이상의 모든 수준이 기록됩니다. Bunyan 스트림은 출력이 기록되는 장소입니다. 응용 프로그램의 하위 구성 요소는 log.child() 함수를 사용하여 기록할 수 있습니다. 모든 하위 로거는 특정 상위 응용 프로그램에 바인딩됩니다. 스트림 유형은 파일, 회전 파일, 원시 데이터 등이 될 수 있습니다. 스트림을 정의하기 위한 코드 샘플은 다음과 같습니다.

var bunyan = require('bunyan');
var log = bunyan.createLogger({
    name: "foo",
    streams: [
        {
            stream: process.stderr,
            level: "debug"
        },
        ...
    ]
});

Bunyan은 DTrace 로깅도 지원합니다. DTrace 로깅과 관련된 프로브에는 log-trace, log-warn, log-error, log-info, log-debug 및 log-fatal이 포함됩니다. Bunyan은 직렬 변환기를 사용하여 JSON 형식의 로그를 생성합니다. 직렬 변환기 함수는 예외를 throw하지 않으며 방어적입니다.

로그 수준

Loglevel은 Javascript 응용 프로그램에 로그인하는 데 사용됩니다. 또한 가볍고 단순하기 때문에 Node.js 최고의 로거 중 하나입니다. 주어진 레벨을 기록하고 로깅에 종속성이 없는 단일 파일을 사용합니다. 기본 로그 수준은 “경고”입니다. 로그 출력은 줄 번호와 함께 형식이 잘 지정됩니다. 로깅에 사용되는 일부 방법은 추적, 디버그, 경고, 오류 및 정보입니다.

  누군가의 트위터 동영상을 리트윗하지 않고 퍼가는 방법

그들은 어떤 환경에서도 실패에 대한 회복력이 있습니다. getLogger()는 로거 개체를 검색하는 데 사용되는 메서드입니다. 다른 플러그인과 결합하여 기능을 확장할 수도 있습니다. 일부 플러그인에는 loglevel-plugin-prefix, loglevel-plugin-remote, ServerSend 및 DEBUG가 포함됩니다. 로깅에 접두사 메시지를 추가하는 플러그인은 다음과 같습니다.

var originalFactory = log.methodFactory;
log.methodFactory = function (methodName, logLevel, loggerName) {
    var rawMethod = originalFactory(methodName, logLevel, loggerName);

    return function (message) {
        rawMethod("Newsflash: " + message);
    };
};
log.setLevel(log.getLevel()); // Be sure to call setLevel method in order to apply plugin

빌드는 npm run dist 명령을 사용하여 실행되고 테스트는 npm test 명령을 사용하여 실행할 수 있습니다. 로그 수준은 Webjar, Bower 및 Atmosphere 패키지를 지원합니다. 새로운 기능이 추가될 때마다 새로운 버전의 Loglevel이 출시됩니다.

시그널

Signale는 Javascript 애플리케이션을 위한 19개의 로거로 구성되어 있습니다. TypeScript 및 범위 로깅을 지원합니다. 타임스탬프, 데이터 및 파일 이름을 기록하는 데 도움이 되는 타이머로 구성됩니다. await, complete, fatal, fav, info 등과 같은 19개의 로거 외에도 사용자 지정 로그를 만들 수 있습니다.

사용자 지정 로그는 로거 데이터로 JSON 개체 및 필드를 정의하여 생성됩니다. 대화형 로거도 생성할 수 있습니다. 대화식 로거가 true로 설정되면 대화식 로거의 새 값이 이전 값을 재정의합니다.

Signale의 가장 좋은 점은 비밀스럽거나 민감한 정보를 걸러내는 기능입니다. 여러 비밀이 배열에 저장됩니다. addSecrets() 및 clearSecrets()는 배열에서 비밀을 추가하고 지우는 데 사용되는 함수입니다. Boostnote, Docz, Shower, Taskbook 및 Vant는 로깅에 Signale를 사용합니다. Signale에서 API를 호출하는 구문은 다음과 같습니다.

signale.<logger>(message[,message]|messageObj|errorObj)

이 기사를 작성하는 시점에서 Signale 다운로드 수는 100만 회를 넘었습니다.

트레이서

추적자는 자세한 로깅 메시지를 생성하는 데 사용됩니다. 로깅 메시지는 타임스탬프, 파일 이름, 줄 번호 및 메서드 이름으로 구성됩니다. 도우미 패키지를 설치하여 출력 로깅 형식을 사용자 지정할 수 있습니다. 도우미 패키지는 다음 명령을 사용하여 설치할 수 있습니다.

 npm install -dev tracer

Tracer는 파일, 스트림 및 MongoDB 전송을 지원합니다. 로깅에서 색상 콘솔 및 필터 조건을 지원합니다. 처음에는 npm install을 사용하여 추적 프로그램을 설치해야 합니다. 둘째, 로거 객체를 생성하고 콘솔의 종류를 선택해야 합니다. 그런 다음 추가 로깅을 위해 개체에 대해 다양한 로그 수준 또는 유형을 지정할 수 있습니다.

기능 본문에 있는 비즈니스 로직으로 동기 기능을 정의하여 사용자 정의 필터를 생성할 수 있습니다. tinytim과 같은 마이크로 템플릿도 시스템 로깅에 사용할 수 있습니다.

캐빈.js

Cabin은 node.js 애플리케이션의 서버 및 클라이언트 측 로깅에 사용됩니다. 민감하고 중요한 정보의 마스킹이 필요한 경우에 사용됩니다. 여기에는 신용 카드 번호, BasicAuth 헤더, 솔트, 비밀번호, CSRF 토큰 및 은행 계좌 번호가 포함됩니다. 아래 코드 스니펫은 Cabin.js를 사용한 로깅을 보여줍니다.

const Cabin = require('cabin');
const cabin = new Cabin();
cabin.info('hello world');
cabin.error(new Error('oops!'));

1600개 이상의 필드 이름으로 구성됩니다. 또한 BYOL(Bring Your Own Logger) 원칙을 따릅니다. 이를 통해 Axe, Pino, Bunyan, Winston 등과 같은 다양한 다른 로거와 호환됩니다. 자동 스트림 및 캐빈 버퍼로 인해 디스크의 저장 비용이 절감됩니다. 플랫폼 간 호환이 가능하고 디버그하기 쉽습니다.

  Netflix에서 자막을 강제로 제거하는 방법

서버 측 로깅은 라우팅 및 자동 출력 로깅을 위해 미들웨어를 사용해야 합니다. 브라우저 측 로깅에는 XHR 요청과 스크립트가 필요합니다. 그것은 메타 데이터, 즉 데이터, 스택 추적 및 기타 오류에 대한 데이터를 표시하는 Ax를 사용합니다. SHOW_STACK 및 SHOW_META는 스택 추적 및 메타데이터를 표시하거나 숨기기 위해 true 또는 false로 설정된 부울 변수입니다.

Npmlog

Npmlog는 npm이 사용하는 기본 유형의 로거입니다. 사용되는 로깅 방법 중 일부는 레벨, 레코드, maxRecordSize, prefixStyle, 제목 및 스트림입니다. 또한 컬러 로깅을 지원합니다. 다양한 로깅 수준은 어리석음, 장황함, 정보, 경고, http 및 오류입니다. npm 로그를 사용하기 위한 샘플 코드 스니펫은 아래와 같습니다.

var log = require('npmlog')

// additional stuff ---------------------------+
// message ----------+                         |
// prefix ----+      |                         |
// level -+   |      |                         |
//        v   v      v                         v
    log.info('fyi', 'I have a kitty cat: %j', myKittyCat)

“무한대”가 로그 수준으로 지정된 경우 모든 메시지가 표시되지 않습니다. “-Infinity”가 로그 수준으로 지정된 경우 로그를 보려면 로깅 메시지를 보는 옵션을 활성화해야 합니다.

이벤트 및 메시지 개체는 로깅에 사용됩니다. 접두사 이벤트가 사용될 때 접두사 메시지가 방출됩니다. 스타일 개체는 텍스트 및 배경에 색상 추가, 굵게, 기울임꼴, 밑줄 등과 같은 글꼴 스타일 추가와 같은 로그 형식 지정에 사용됩니다. 일부 npm 로그 패키지는 brolog, npmlogger, npmdate log 등입니다.

포효

Roarr는 초기화가 필요하지 않고 구조화된 데이터를 생성하는 Node.js용 로거입니다. CLI 및 환경 변수가 있습니다. 브라우저와 호환됩니다. Fastify, Fastify, Elastic Search 등과 통합할 수 있습니다. 애플리케이션 코드와 종속성 코드를 구분할 수 있습니다. 모든 로그 메시지는 컨텍스트, 메시지, 시퀀스, 시간 및 버전으로 구성됩니다. 다양한 로그 수준에는 추적, 디버그, 정보, 경고, 오류 및 치명적이 포함됩니다. 로깅이 수행되는 방법에 대한 샘플 코드 스니펫은 Roarr입니다.

import {
  ROARR,
} from 'roarr';

ROARR.write = (message) => {
  console.log(JSON.parse(message));
};

또한 오류 직렬화를 수행할 수 있습니다. 즉, 오류가 있는 인스턴스가 개체의 컨텍스트와 함께 기록될 수 있습니다. Node.js 및 Roarr에 특정한 환경 변수 중 일부는 ROARR_LOG 및 ROARR_STREAM입니다. “adopt”는 node.js와 함께 사용하여 컨텍스트 속성을 다양한 수준으로 전달하는 기능입니다. 하위 기능은 로깅하는 동안에도 미들웨어와 함께 사용할 수 있습니다.

마지막 단어

로깅은 프로그램을 실행하는 동안 다양한 활동과 이벤트를 추적하는 방법입니다. 로깅은 코드 디버깅에서 중요한 역할을 합니다. 또한 코드 가독성을 높이는 데 도움이 됩니다. Node.js는 오픈 소스 자바스크립트 런타임 환경입니다. 최고의 Node.js 로거 중 일부는 Pino, Winston, Bunyan, Signale, Tracer, Npmlog 등이 있습니다. 각 유형의 로거에는 프로파일링, 필터링, 스트리밍 및 전송과 같은 고유한 기능이 있습니다.

일부 로거는 컬러 콘솔을 지원하고 일부는 민감한 정보를 처리하는 데 적합합니다. 상세하고 형식이 지정된 로그는 개발자가 코드의 버그를 수정하는 데 가장 큰 도움이 됩니다. JSON 형식은 일반적으로 키-값 쌍의 형태로 데이터를 기록하여 사용자에게 친숙하기 때문에 로깅에 선호됩니다.

로거는 다른 응용 프로그램과 통합할 수도 있으며 다중 브라우저와 호환됩니다. 사용하려는 로거 유형을 선택하기 전에 구축하려는 요구 사항과 응용 프로그램을 항상 살펴보는 것이 좋습니다.

Windows 및 macOS에 Node.js 및 NPM을 설치하는 방법도 확인할 수 있습니다.