반응형

우분투 bash에서 구조화된 로그를 출력하는 함수를 만들어 봅시다. 다음과 같이 구성할 수 있습니다:

#!/bin/bash

# 로그 함수 정의
log() {
    local level=$1
    shift
    local message="$@"
    local timestamp=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
    #한국 시간으로 출력하고 싶다면, 아래를 쓴다. (위는 UTC이다)
    #local timestamp=$(TZ='Asia/Seoul' date + "%Y-%m-%dT%H:%M:%SZ")
    local app_name="PKTRT_TEST"
    
    echo "${timestamp} | ${level} | ${app_name} | ${message}"
}

# 각 레벨별 편의 함수
log_debug() {
    log "DEBUG  " "$@"
}

log_info() {
    log "INFO   " "$@"
}

log_warn() {
    log "WARN   " "$@"
}

log_error() {
    log "ERROR  " "$@"
}

 

(주의!! log 함수를 쉘 스크립트 맨 앞에 정의해야 사용 가능합니다. 뒤에다 정의하면 명령어를 찾을 수 없다고 뜹니다.)

■ 사용 예시
log_info "hello world"
log_debug "디버그 메시지"
log_warn "경고 메시지"
log_error "에러 발생"


■ 주요 포인트
- 타임스탬프: date -u +"%Y-%m-%dT%H:%M:%SZ" 명령으로 UTC 기준 ISO 8601 형식 생성
(만약, 한국시간으로 출력하고 싶다면 -u를 제거해주거나 혹은
local timestamp=$(TZ='Asia/Seoul' date + "..)
위와 같이 TimeZone을 붙여준다.

- 레벨 정렬: 공백을 추가해 레벨명 길이를 맞춰 출력 정렬
- 재사용성: 스크립트 상단에 함수를 정의하고 필요할 때마다 호출

더 발전시키려면 아래처럼 색상을 넣을 수 있습니다.

■ 색상 추가 (터미널에서만)

log_info() {
    echo -e "\033[0;32m$(date -u +"%Y-%m-%dT%H:%M:%SZ") | INFO    | PKTRT_TEST |\033[0m $@"
}

log_error() {
    echo -e "\033[0;31m$(date -u +"%Y-%m-%dT%H:%M:%SZ") | ERROR   | PKTRT_TEST |\033[0m $@" >&2
}


이렇게 하면 일관된 형식으로 로그를 관리할 수 있고, 나중에 grep이나 로그 분석 도구로 쉽게 파싱할 수 있습니다.

반응형