logologo
시작
가이드
개발
플러그인
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
시작
가이드
개발
플러그인
API
logologo

빠른 시작

플러그인 개발 개요
첫 플러그인 작성
프로젝트 디렉토리 구조

서버사이드 개발

개요
Plugin 플러그인
Collections 데이터 테이블
Database 데이터베이스 작업
DataSourceManager 데이터 소스 관리
ResourceManager 리소스 관리
ACL 권한 제어
Middleware 미들웨어
Cache 캐시
Event 이벤트
Context 요청 컨텍스트
Migration 업그레이드 스크립트
Logger 로그
I18n 국제화
Command 커맨드 라인
CronJobManager 예약 작업 관리
Test 테스트

클라이언트사이드 개발

개요
Plugin 플러그인
Context 컨텍스트
Router 라우터
ACL 권한 제어
DataSourceManager 데이터 소스 관리
Resource 리소스
Request 요청
Styles & Themes 스타일 & 테마
Logger 로그
I18n 국제화
Test 테스트

기타

플러그인 업그레이드 가이드
언어 목록
의존성 관리
빌드
Previous PageMigration 업그레이드 스크립트
Next PageI18n 국제화
TIP

이 문서는 AI로 번역되었습니다. 부정확한 내용이 있을 경우 영어 버전을 참조하세요

#로거

NocoBase의 로깅은 Winston을 기반으로 합니다. 기본적으로 NocoBase는 로그를 API 요청 로그, 시스템 런타임 로그, 그리고 SQL 실행 로그로 나눕니다. 이 중 API 요청 로그와 SQL 실행 로그는 애플리케이션 내부에서 출력되며, 플러그인 개발자는 일반적으로 플러그인과 관련된 시스템 런타임 로그만 출력하면 됩니다.

이 문서에서는 플러그인을 개발할 때 로그를 생성하고 출력하는 방법을 주로 설명합니다.

#기본 출력 메서드

NocoBase는 시스템 런타임 로그 출력 메서드를 제공합니다. 로그는 지정된 필드에 따라 출력되며, 동시에 지정된 파일로 저장됩니다.

// 기본 출력 메서드
app.log.info("message");

// 미들웨어에서 사용
async function (ctx, next) {
  ctx.log.info("message");
}

// 플러그인에서 사용
class CustomPlugin extends Plugin {
  async load() {
    this.log.info("message");
  }
}

위의 모든 메서드는 다음 사용법을 따릅니다:

첫 번째 매개변수는 로그 메시지이며, 두 번째 매개변수는 선택적 메타데이터 객체로, 어떤 키-값 쌍이든 될 수 있습니다. 여기서 module, submodule, method는 개별 필드로 추출되고, 나머지 필드는 meta 필드에 포함됩니다.

app.log.info('message', {
  module: 'module',
  submodule: 'submodule',
  method: 'method',
  key1: 'value1',
  key2: 'value2',
});
// => level=info timestamp=2023-12-27 10:30:23 message=message module=module submodule=submodule method=method meta={"key1": "value1", "key2": "value2"}

app.log.debug();
app.log.warn();
app.log.error();

#다른 파일로 출력

시스템의 기본 출력 메서드를 사용하고 싶지만, 기본 파일이 아닌 다른 파일로 출력하고 싶다면 createSystemLogger를 사용하여 사용자 지정 시스템 로거 인스턴스를 생성할 수 있습니다.

import { createSystemLogger } from '@nocobase/logger';

const logger = createSystemLogger({
  dirname: '/pathto/',
  filename: 'xxx',
  seperateError: true, // error 레벨 로그를 'xxx_error.log' 파일로 별도 출력할지 여부
});

#사용자 지정 로거

시스템에서 제공하는 출력 메서드 대신 Winston의 기본 메서드를 사용하고 싶다면, 다음 방법을 통해 로그를 생성할 수 있습니다.

#createLogger

import { createLogger } from '@nocobase/logger';

const logger = createLogger({
  // options
});

options는 기존 winston.LoggerOptions를 확장합니다.

  • transports - 'console' | 'file' | 'dailyRotateFile'을 사용하여 미리 설정된 출력 방식을 적용할 수 있습니다.
  • format - 'logfmt' | 'json' | 'delimiter'을 사용하여 미리 설정된 출력 형식을 적용할 수 있습니다.

#app.createLogger

다중 애플리케이션 시나리오에서는 사용자 지정 출력 디렉터리 및 파일을 현재 애플리케이션 이름의 디렉터리에 출력하고 싶을 때가 있습니다.

app.createLogger({
  dirname: '',
  filename: 'custom', // /storage/logs/main/custom.log로 출력됩니다.
});

#plugin.createLogger

사용 시나리오와 방법은 app.createLogger와 동일합니다.

class CustomPlugin extends Plugin {
  async load() {
    const logger = this.createLogger({
      // /storage/logs/main/custom-plugin/YYYY-MM-DD.log로 출력됩니다.
      dirname: 'custom-plugin',
      filename: '%DATE%.log',
      transports: ['dailyRotateFile'],
    });
  }
}