본문으로 건너뛰기

로그 스트리밍

실행 중인 잡의 로그를 offset 폴링으로 따라가는 방법, CLI와 MCP와 콘솔의 로그 보기, 로그 크기 한도를 설명합니다

로그는 GET /v1/jobs/{job_id}/logs를 offset과 함께 반복해서 부르는 방식으로 실시간에 가깝게 읽고, CLI는 이 폴링을 대신해 줍니다

API로 따라가기

curl -s "https://xenoci.com/api/runner/v1/jobs/job_7Kp2QmX9bT4vR1sLwZ3n/logs?offset=0" \
  -H "Authorization: Bearer $XENOCI_API_KEY" -D -
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
X-Log-Next-Offset: 4096
X-Log-Complete: false
X-Request-Id: req_…

[xenoci] 업로드 반영 1.2초
Command line invocation:
    /Applications/Xcode_27.0.app/Contents/Developer/usr/bin/xcodebuild -scheme App ...
헤더뜻
X-Log-Next-Offset다음 호출에 넣을 offset (바이트)
X-Log-Completetrue면 잡이 끝났고 더 쌓일 로그가 없음

폴링 순서는 다음과 같습니다

  1. offset=0으로 시작해 본문을 출력합니다
  2. X-Log-Next-Offset을 다음 offset으로 씁니다
  3. X-Log-Complete가 false면 2초쯤 기다렸다가 반복합니다
  4. true가 되면 잡을 한 번 더 읽어 status, exit_code, billed_minutes를 확인합니다

셸로 쓰면 이렇습니다

JOB=job_7Kp2QmX9bT4vR1sLwZ3n; OFF=0
while :; do
  H=$(mktemp)
  curl -s "https://xenoci.com/api/runner/v1/jobs/$JOB/logs?offset=$OFF" \
    -H "Authorization: Bearer $XENOCI_API_KEY" -D "$H"
  OFF=$(grep -i '^x-log-next-offset:' "$H" | tr -dc '0-9')
  grep -qi '^x-log-complete: true' "$H" && break
  sleep 2
done

offset이 현재 크기보다 크면 빈 본문이 오고 X-Log-Next-Offset은 요청한 값 그대로입니다

아직 로그가 없는 queued 잡도 빈 본문으로 응답합니다

CLI

xenocast build --script ./ci.sh            # 제출하고 끝날 때까지 로그 출력
xenocast logs job_7Kp2QmX9bT4vR1sLwZ3n --wait     # 이미 제출한 잡을 따라감
xenocast logs job_7Kp2QmX9bT4vR1sLwZ3n --tail 200 # 마지막 200줄
xenocast logs job_7Kp2QmX9bT4vR1sLwZ3n --failure  # 첫 오류 줄 주변만
xenocast logs job_7Kp2QmX9bT4vR1sLwZ3n            # 지금까지 전체

build와 logs --wait는 로그를 표준 출력에 그대로 흘리고, 잡이 끝나면 표준 오류에 한 줄 요약을 냅니다

잡 job_7Kp2QmX9bT4vR1sLwZ3n succeeded (종료 코드 0), 실행 125초, 과금 3분, 금액 $0.1188, 남은 잔액 $12.2377

--json을 주면 로그는 표준 오류로, 결과 JSON 한 개만 표준 출력으로 나옵니다

CLI는 출력에서 xci_live_… 모양의 문자열을 가립니다

MCP

  • status 도구는 잡 상태와 함께 마지막 로그 줄을 돌려줍니다 (lines 기본 40, 최대 200)
  • logs 도구는 전체 로그를 폴더에 파일로 쓰고 경로, 크기, sha256, 마지막 40줄, 실패 요약만 돌려줍니다, 전체 본문을 대화에 넣지 않습니다
  • build에 wait: true를 주면 끝날 때까지 로그를 진행 알림으로 흘립니다

콘솔

실행 → 잡 메뉴에서 잡을 열면 상세 패널에 로그가 실시간으로 올라옵니다

분석 → 로그 메뉴는 워크스페이스의 잡과 API 요청 기록을 상태, 기간, 키, 출처로 걸러 찾는 화면이고 API 요청 기록은 30일 보관합니다

GitHub Actions

xeno-ci/build 단계는 잡 로그를 그대로 단계 로그로 흘리고 잡의 종료 코드를 단계의 종료 코드로 돌려줍니다

끝에는 CLI와 같은 요약 한 줄이 남습니다

로그 규칙

  • 로그는 잡당 5MiB까지 저장합니다, 넘는 부분은 버리고 [xenoci] log truncated 한 줄을 남깁니다, 긴 로그는 파일로 써서 결과물로 받으세요
  • [xenoci]로 시작하는 줄은 러너가 넣은 것입니다, 업로드 반영 시간, VM 준비 재시도, 결과물 수집 결과가 여기 남습니다
  • 로그는 스크립트의 표준 출력과 표준 오류를 섞어 기록합니다
  • 환경 변수 값은 가려지지 않습니다, 비밀값을 echo하지 마세요

다음 단계