본문 바로가기
WIKI 기술 지식 베이스

Root Logger 서비스

원문 보기 위키 갱신

root logger는 다른 root 서비스들이 사용하는 logger예요. Backstage 생태계 전반에서 올바른 메타데이터와 주석을 가진 플러그인용 하위 logger를 포함해 child logger를 만드는 구현이 여기에 있어요.

출처: 문서

본문

Root Logger

root logger는 다른 root 서비스들이 사용하는 logger예요. Backstage 생태계 전반에서 올바른 메타데이터와 주석을 가진 플러그인용 하위 logger를 포함해 child logger를 만드는 구현이 여기에 있어요.

전체 백엔드에 걸친 로깅 구현을 덮어쓰고 싶다면 이 서비스를 덮어써야 해요.

서비스 구성하기

구성 매개변수

Root Logger 서비스는 app-config.yaml의 backend.logger 섹션으로 구성할 수 있어요.

다음 매개변수를 사용할 수 있어요.

  • level(string, 선택): 전역 로그 수준을 설정해요. 가능한 값은 debug, info, warn, error예요. 이 수준 이상의 메시지만 기록돼요. 이 값은 우선순위가 더 높은 LOG_LEVEL 환경 변수로도 설정할 수 있어요. 기본값은 info예요. 로그 수준 수정을 참고하세요.

  • meta(object, 선택): 모든 로그 항목에 포함할 추가 메타데이터예요.

  • overrides(array, 선택): 특정 플러그인이나 메시지에 대한 logger 오버라이드를 지정할 수 있게 해줘요. 각 오버라이드는 플러그인 이름, 메시지 패턴 또는 로그에 포함된 어떤 필드로든 일치시켜, 해당 항목들에 사용자 지정 로그 수준을 설정할 수 있어요.

로그 수준 오버라이드는 Backstage에서 생성되는 로그의 양을 제어하는 데 유용해요. 전역 로그 수준(예: info)을 적용하면서도 특정 자세한 플러그인에는 더 엄격한 수준(예: warn)을 설정할 수 있게 해줘요.

반대도 가능해요. 전역 로그 수준을 warn으로 설정하면서 특정 로그에는 debug 같은 더 상세한 수준을 활성화할 수 있어요.

예시:

backend:
  logger:
    meta:
      env: prod # Every log message will have `env="prod"`
    level: info # Set the global log level to info (the default)
    overrides:
      # Set the log level to 'debug' for the catalog plugin logs
      - matchers:
          plugin: catalog
        level: debug
      # Ignore 'info' incoming HTTP requests logs from the rootHttpRouter service
      - matchers:
          service: rootHttpRouter
          type: incomingRequest
        level: warn
      # Ignore logs starting with "Registered scheduled task", unless they're warnings or errors
      - matchers:
          message: ['/^Registered scheduled task/']
        level: warn

로그 수준 수정하기

사용 가능한 로그 수준은 자세함이 감소하는 순서대로 다음과 같아요.

  • debug: 일반적으로 트러블슈팅할 때만 유용한 상세 정보
  • info: 애플리케이션 동작에 대한 일반 정보. 기본 수준이에요.
  • warn: 주의가 필요할 수 있는 잠재적 문제나 상황을 나타내요.
  • error: 발생했지만 애플리케이션이 계속 진행되는 것을 반드시 막지는 않는 오류를 나타내요.

로그 수준을 설정해 로깅의 자세함을 제어할 수 있어요. 로그 수준은 콘솔에 출력될 이벤트의 최소 심각도 수준을 결정해요. 예를 들어 로그 수준이 info로 설정되면 심각도 수준 debug인 이벤트는 무시돼요.

로그 수준을 높이려면 LOG_LEVEL 환경 변수를 warn이나 error 같은 더 높은 심각도 수준으로 설정하면 돼요. 다만 기존 코드가 주로 낮은 심각도 수준(예: debug나 info)으로 로그를 내보낸다면 로그 수준을 높여도 출력이 더 많아지지 않을 수 있다는 점에 유의하세요. 그런 경우에는 더 많은 출력을 보려면 코드 내 로깅 문장이 더 높은 심각도 수준을 사용하도록 조정해야 할 수 있어요.

LOG_LEVEL 환경 변수를 설정하는 것 외에 추가 단계는 필요 없지만, 효과는 코드의 기존 로깅 문장에 따라 달라져요.

자세한 내용은 Debugging Backstage 가이드를 참고하세요.

기본 구현 덮어쓰기

다음 예시는 root logger 서비스를 덮어써 모든 로그 줄에 추가 메타데이터를 덧붙이는 방법이에요.

import { coreServices } from '@backstage/backend-plugin-api';
import { WinstonLogger } from '@backstage/backend-defaults/rootLogger';
import { createConfigSecretEnumerator } from '@backstage/backend-defaults/rootConfig';

const backend = createBackend();
backend.add(
  createServiceFactory({
    service: coreServices.rootLogger,
    deps: {
      config: coreServices.rootConfig,
    },
    async factory({ config }) {
      const logger = WinstonLogger.create({
        meta: {
          service: 'backstage',
          // here's some additional information that is not part of the
          // original implementation
          podName: 'myk8spod',
        },
        level: process.env.LOG_LEVEL || 'info',
        format:
          process.env.NODE_ENV === 'production'
            ? format.json()
            : WinstonLogger.colorFormat(),
        transports: [new transports.Console()],
      });
      const secretEnumerator = await createConfigSecretEnumerator({
        logger,
      });
      logger.addRedactions(secretEnumerator(config));
      config.subscribe?.(() => logger.addRedactions(secretEnumerator(config)));
      return logger;
    },
  }),
);

더 알아보기 (Learn more)