https://blog.plainbit.co.kr/loglayer-gaebaljareul-wihan-hyeogsinjeogin-tonghab-roging-raibeureori/
LogLayer: 개발자를 위한 혁신적인 통합 로깅 라이브러리
안녕하세요, 개발자 여러분! 오늘은 최근 GitHub에서 주목받고 있는 프로젝트인 LogLayer에 대해 상세히 소개해드리고자 합니다. LogLayer는 다양한 로깅 라이브러리와 클라우드 제공업체에 로그를 라
blog.plainbit.co.kr
LogLayer
다양한 로깅 라이브러리와 클라우드 제공업체에 로그를 라우팅하는 통합 로거.
로그 메시지, 메타데이터 및 오류를 지정하기 위한 유연한 API를 제공
기존의 로깅 라이브러리들은 각각 다른 API 가져 여러 프로젝트에서 일관된 로깅 방식 유지하기 어렵고 로깅 라이브러리 변경할 때마다 애플리케이션 전체의 로깅 코드 수정해야 하는 번거로움 존재했음
※ 로깅(Logging)이란? - 정보를 제공하는 일련의 기록인 로그(Log)를 생성하도록 시스템 작성하는 활동
LogLayer의 주요 특징
- 일관된 API: 다양한 로깅 라이브러리에 대해 일관된 API 제공
- 다중 전송 지원: 여러 대상(DataDog, New Relic 등)에 동시에 로그 전송 가능
- 유연한 로거 교체: 애플리케이션 코드 변경하지 않고도 로깅 라이브러리 쉽게 교체 가능
- 플러그인 시스템: 로그 데이터를 로깅 라이브러리로 전송하기 전 수정할 수 있는 플러그인 시스템 제공
- 표준화된 오류 처리: 오류 처리 및 직렬화를 표준화하여 일관된 오류 로깅 가능하게 함
- 테스트를 위한 내장 목(mock): 테스트 시 로깅 코드 쉽게 모의할 수 있는 기능 제공
LogLayer는 '전송(Transport)' 시스템을 통해 작동.
전송 시스템은 선호하는 로깅 라이브러리에 대한 어댑터 역할을 함.
LogLayer의 설치 및 기본 사용법
npm을 통해 코어 패키지를 설치해야 함. ▼
npm i loglayer
설치 후 기본적인 사용법:
import { LogLayer, ConsoleTransport } from 'loglayer'
const log = new LogLayer({
transport: new ConsoleTransport({
logger: console,
}),
})
log.withMetadata({ some: 'data'}).withError(new Error('test')).info('my message')
Pino 로깅 라이브러리와 함께 LogLayer를 사용하는 예시:
import { LogLayer } from 'loglayer';
import { pino } from 'pino';
import { PinoTransport } from '@loglayer/transport-pino';
import { redactionPlugin } from '@loglayer/plugin-redaction';
const log = new LogLayer({
transport: new PinoTransport({
logger: pino()
}),
plugins: [
redactionPlugin({
paths: ['password'],
censor: '[REDACTED]',
}),
],
})
log.withPrefix("[my-app]")
.withMetadata({ some: 'data', password:'my-pass' })
.withError(new Error('test'))
.info('my message')
위 예시를 통해 생성되는 로그 출력:
{
"level": 30,
"time": 1735857465669,
"msg": "[my-app] my message",
"password": "[REDACTED]",
"some": "data",
"err":{
"type": "Error",
"message": "test",
"stack": "Error: test\n..."
}
}
LogLayer는 강력한 플러그인 시스템을 제공. 이를 통해 로그 데이터를 로깅 라이브러리로 전송하기 전 수정 가능.
위 예시에서 사용된 redactionPlugin은 민감한 정보를 자동으로 가리는 역할을 함.
다른 로깅 라이브러리와 LogLayer의 차별점
- Winston
- Node.js에서 가장 인기 있는 로깅 라이브러리 중 하나
- Winston도 다양한 전송 옵션과 로그 레벨 제공하지만 LogLayer는 더 일관된 API와 쉬운 전환성을 제공
- LogLayer의 플러그인 시스템은 Winston의 사용자 정의 포맷터보다 더 강력하고 유연함
- Pino
- 성능에 중점을 둔 로깅 라이브러리
- LogLayer는 Pino의 성능 이점을 그대로 활용하면서 더 풍부한 기능과 유연성 제공
- 특히 Pino 단독으로는 구현이 어려운 '여러 로깅 대상에 동시에 로그를 전송하는 기능' 제공
- Bunyan
- JSON 로깅에 특화된 라이브러리
- LogLayer는 Bunyan의 JSON 로깅 기능을 포함하면서도 더 다양한 형식과 대상으로의 로깅을 지원
- LogLayer의 플러그인 시스템은 Bunyan보다 더 강력한 로그 변환 및 처리 기능을 제공
※ Node.js란? - JavaScript 코드를 브라우저 밖에서 실행할 수 있게 해주는 런타임 환경
※ JSON이란? - 일반적으로 서버에서 클라이언트로 데이터를 보낼 때 사용하는 양식
LogLayer의 성능과 확장성
- 성능
- 기본적으로 비동기 로깅을 지원하여 애플리케이션의 주 실행 흐름에 미치는 영향을 최소화함
- 로그 볼륨이 증가하더라도 효율적으로 처리할 수 있도록 설계
- 확장성 측면에서의 이점
- 다중 로거 지원: 여러 로깅 라이브러리를 동시에 사용할 수 있어, 다양한 요구사항에 맞춰 로깅 전략 구성 가능
- 클라우드 제공업체 통합: DataDog, New Relic 등 주요 클라우드 모니터링 서비스와의 통합을 쉽게 구현 가능
- 사용자 정의 전송: 필요에 따라 사용자 정의 전송을 구현하여 특정 요구사항을 충족시킬 수 있음
LogLayer의 미래 전망
- 더 다양한 로깅 라이브러리와 클라우드 서비스에 대한 지원 확대
- 대규모 로그 처리 시나리오엥서의 성능 개선
- 로그 데이터에 대한 실시간 분석 및 인사이트 제공 기능 추가
- 로그 데이터의 암호화 및 접근 제어 기능 강화
'SWUFORCE > 기술 스터디' 카테고리의 다른 글
[EST SECURITY] 계정정보 탈취를 시도하는 피싱 공격 진행 중! 북 배후 추정 (0) | 2025.01.28 |
---|---|
[AhnLab] 광고 페이지 악용한 프록시재킹 공격 주의 (1) | 2025.01.20 |
[IGLOO] 합동 주의보! 신분 위장을 조심하라! (2) | 2024.11.26 |
[SAMSUNG SDS] 'AI 시대의 혁신과 기회'로 바라본 클라우드 시장 전망 (2) | 2024.11.12 |
[Genians] Google Form과 NAC REST API를 이용한 IP 신청 (0) | 2024.11.03 |