티스토리 뷰
QuickBuild의 configuration.log 파일을 생성하는 "코드"에 대해 설명.
결론부터 말씀드리면, 사용자가 직접 볼 수 있는 단일 스크립트나 코드 파일은 없습니다. 해당 로그는 QuickBuild 서버 애플리케이션의 핵심 로직(컴파일된 Java 코드)에 의해 생성.
하지만 어떻게, 왜, 그리고 어떤 형식으로 로그가 생성되는지 그 원리를 이해하는 것이 중요. 이 원리를 알면 로그를 더 잘 파싱하고 활용할 수 있다.
configuration.log 생성 원리: Log4j 로깅 프레임워크
QuickBuild는 Java로 만들어진 애플리케이션이며, 내부적으로 매우 유명한 로깅 프레임워크인 Apache Log4j를 사용.
즉, QuickBuild의 소스 코드 내에는 다음과 같은 형태의 "로그를 남겨라"는 명령어들이 곳곳에 포함되어 있다.
// 이것은 QuickBuild 내부 코드의 '가상' 예시입니다. 실제 코드는 공개되어 있지 않습니다.
// 예: 빌드가 끝났을 때 BuildManager 클래스 내부
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class BuildManager {
private static final Logger logger = LoggerFactory.getLogger(BuildManager.class);
public void onBuildFinished(Build build) {
long durationSeconds = build.getDuration() / 1000;
// 여기에 로그를 기록하는 코드가 있습니다!
logger.info("Build '{}' is FINISHED ({}) in {} seconds",
build.getId(),
build.getStatus(),
durationSeconds);
}
}
위 logger.info(...) 와 같은 코드가 실행될 때, Log4j 프레임워크가 이 메시지를 받아 어디에(Where), 어떤 형식으로(How), 어떤 레벨의(What level) 로그를 남길지 결정.
이 모든 설정은 바로 log4j.properties 파일에 정의되어 있다.
log4j.properties 파일: 로그 생성의 설계도
이 파일은 QuickBuild 로그 시스템의 모든 것을 제어하는 "설계도"와 같다. 이 파일을 통해 configuration.log가 어떻게 생성되는지 정확히 알 수 있다.
- 파일 위치: <QuickBuild 설치 경로>/conf/log4j.properties
이 파일을 열어보면 다음과 같은 구조로 되어 있다.
1. Appender (어디에 저장할 것인가?)
Appender는 로그를 어디에 보낼지 정의합니다. configuration.log는 CONF라는 이름의 Appender에 의해 관리됩니다.
# A size based rolling appender for configuration log
log4j.appender.CONF=org.apache.log4j.RollingFileAppender
log4j.appender.CONF.File=${quickbuild.home}/logs/configuration.log
log4j.appender.CONF.MaxFileSize=10MB
log4j.appender.CONF.MaxBackupIndex=5
log4j.appender.CONF.layout=org.apache.log4j.PatternLayout
log4j.appender.CONF.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
- log4j.appender.CONF.File: 로그 파일의 경로와 이름 지정. logs/configuration.log로 설정되어 있다.
- log4j.appender.CONF.MaxFileSize: 로그 파일이 10MB에 도달하면 새 파일을 만든다.
- log4j.appender.CONF.MaxBackupIndex: 최대 5개의 오래된 로그 파일(configuration.log.1, configuration.log.2 등)을 보관.
- log4j.appender.CONF.layout.ConversionPattern: 로그 형식(포맷)을 정의하는 가장 중요한 부분.
2. ConversionPattern (어떤 형식으로 기록할 것인가?)
이 패턴이 Grafana 파싱의 핵심입니다. 각 기호는 특정 정보를 의미.
%d [%t] %-5p %c - %m%n
- %d: 날짜 및 시간 (예: 2023-10-27 15:30:00,123)
- [%t]: 스레드 이름(Thread Name). QuickBuild에서는 이 부분이 매우 중요하며, 보통 빌드를 실행하는 설정의 경로(예: master>root/my-project/main-build)가 여기에 표시.
- %-5p: 로그 레벨(INFO, DEBUG, WARN, ERROR 등). 5자리로 왼쪽 정렬.
- %c: 로거 이름(Logger Name). 보통 로그를 발생시킨 Java 클래스 이름 (예: build.BuildManager).
- -: 구분자
- %m: 로그 메시지 본문(예: Build '12345' is FINISHED (SUCCESS) in 120 seconds)
- %n: 줄 바꿈
이 패턴 때문에 configuration.log의 모든 라인은 일관된 형식을 가지게 되며, Promtail의 정규표현식으로 파싱할 수 있는 것이다.
3. Logger (무엇을 기록할 것인가?)
Logger는 특정 코드 패키지나 클래스에서 발생하는 로그를 어떤 레벨로, 어느 Appender로 보낼지 결정.
# Logger for configuration related services.
log4j.logger.com.pmease.quickbuild.model.Configuration=INFO, CONF
log4j.logger.com.pmease.quickbuild.build=INFO, CONF
log4j.logger.com.pmease.quickbuild.schedule=INFO, CONF
- log4j.logger.com.pmease.quickbuild.build=INFO, CONF
- 의미: com.pmease.quickbuild.build 패키지(및 그 하위 패키지)에서 발생하는 로그 중...
- INFO 레벨 이상의 로그들을...
- CONF Appender (즉, configuration.log 파일)로 보내라.
이 설정 때문에 빌드 시작/종료, 스케줄링 같은 중요한 이벤트들이 configuration.log에 기록되는 것이다.
요약
- 생성 주체: QuickBuild 서버의 컴파일된 Java 코드
- 생성 메커니즘: Apache Log4j 프레임워크 사용
- 제어 파일: <QuickBuild>/conf/log4j.properties
- 핵심 설정:
- Appender: 로그를 configuration.log 파일에 저장하도록 지정.
- ConversionPattern: 날짜 [설정경로] 레벨 클래스 - 메시지와 같은 일관된 로그 형식을 정의합니다. (이것이 Grafana 파싱의 열쇠.)
- Logger: 빌드, 설정, 스케줄과 관련된 중요한 이벤트 로그만 configuration.log에 보내도록 필터링.
따라서 configuration.log를 생성하는 "코드"를 직접 수정할 수는 없지만, log4j.properties 파일을 수정하여 로그의 형식, 저장 위치, 상세 수준(레벨)을 변경하는 것은 가능.
'CI-CD' 카테고리의 다른 글
QB 전반적인 상태 파악(grafana dashboard+json 파일) (0) | 2025.07.09 |
---|---|
QB 점검 및 로그 확인 (10) | 2025.07.09 |
QB Configuration 빌드 통계, Grafana 대시보드 (0) | 2025.07.08 |
DevSecOps 파이프라인 (1) | 2025.04.20 |
Canary 배포(Helm, ArgoCD, Istio) (1) (0) | 2025.04.08 |