서비스 로그와 디버깅
실행 이력에서 View log details를 선택한 뒤 Details 화면을 열면 실행 중의 서비스 로그를 확인할 수 있습니다. 로그는 시간순으로 표시되며, 함수나 모델에서 직접 남긴 메시지도 포함합니다.
로그 수준으로 범위 좁히기
표 위의 log levels 선택기로 원하는 로그 수준을 고릅니다.
| 수준 | 의미와 사용 기준 |
|---|---|
| ERROR | 정상 동작을 막은 실패, 오류 메시지와 스택 추적 |
| WARN | 복구 가능한 문제나 실행을 막지는 않는 예상 밖의 상황 |
| INFO | 정상적인 실행 흐름과 중요한 업무 이벤트 |
| DEBUG | 상세 진단 정보. 운영 환경에서 불필요하게 사용하지 않음 |
| TRACE | 더 상세한 추적 정보 |
개별 항목의 Content 필드를 선택하면 전체 내용을 볼 수 있습니다.
함수에서 유용한 로그 남기기
메시지에는 실행을 추적할 수 있는 식별자, 처리 건수, 재시도 순서와 작업 맥락을 포함합니다. 식별자 자체도 개인정보일 수 있으므로 운영 목적에 필요한 정보만 기록합니다.
아래 코드는 가상의 주문 처리 함수 안에서 사용하는 로그 구문 예시입니다. orderId, userId, results, attemptNumber, maxRetries, operationId, error는 해당 함수가 처리하는 값이며, 각 구문은 그 상황이 발생한 위치에서 사용합니다.
TypeScript v1
console.log("주문 처리 시작", orderId, "요청 사용자", userId);
console.log("온톨로지 조회 결과 건수", results.length);
console.warn("재시도", attemptNumber, "/", maxRetries, "작업", operationId);
console.error("주문 처리 실패", orderId, "오류", error.message);
TypeScript v2
Foundry는 TypeScript v2 함수의 전역 OpenTelemetry 로그 제공자를 설정합니다. @opentelemetry/api-logs에서 로거를 가져와 사용하고, 외부 로깅 라이브러리도 이 전역 제공자에서 얻은 로거로 기록을 보내도록 구성합니다.
import { logs } from "@opentelemetry/api-logs";
const logger = logs.getLogger("order-processing");
함수의 해당 처리 위치에서 다음처럼 구조화된 로그를 남길 수 있습니다.
logger.emit({
severityText: "INFO",
attributes: { LOG_MESSAGE: `주문 처리 시작: ${orderId}` },
body: { orderId, userId },
});
logger.emit({
severityText: "WARN",
attributes: { LOG_MESSAGE: `작업 재시도: ${operationId}` },
body: { attemptNumber, maxRetries, operationId },
});
logger.emit({
severityText: "ERROR",
attributes: { LOG_MESSAGE: `주문 처리 실패: ${orderId}` },
body: { orderId, error: error.message },
});
이 예시는 Foundry가 전역 OpenTelemetry 로그 제공자를 설정한 함수 실행 환경에서 사용합니다.
민감한 데이터는 기록하지 않기
인증정보, 비밀번호, 보안상 민감한 내용을 로그에 남기면 안 됩니다. API 응답 전체에는 개인정보나 비밀정보가 섞여 있을 수 있으므로 그대로 기록하지 않습니다.
필요한 경우 인증 시도 자체와 업무상 필요한 식별자, API 호출의 상태 코드처럼 좁은 범위의 정보만 남깁니다. 오류 메시지에도 민감한 값이 포함될 수 있으므로 기록할 내용을 검토해야 합니다.
특히 워크플로가 읽은 데이터의 보안 표지는 서비스 로그에 자동으로 전파되지 않습니다. 로그 접근을 활성화할 때 관리자가 적절한 표지를 직접 지정해야 합니다.
접근 조건과 추가 조사
서비스 로그와 추적 기록에는 별도 로그 접근 권한이 필요합니다. 일반 인스턴스에서 실행 이력 작업 권한을 가진 사용자는 로그 공유가 활성화되지 않아도 본인이 실행한 최근 24시간의 로그를 볼 수 있습니다. 보안 분류 기반 접근 제어(CBAC)를 사용하는 인스턴스에는 이 예외가 없습니다.
하나의 실행보다 넓은 범위에서 같은 오류를 찾으려면 로그 검색을 사용합니다. 로그 메시지가 어느 호출 구간에서 발생했는지는 추적 기록과 연결하여 확인합니다.