동적 로거 수준을 설정하여 Azure Container Apps의 Java 애플리케이션 문제 해결(미리 보기)

Azure Container Apps 플랫폼은 Java 개발자 전용 기본 제공 진단 도구를 제공하여 Azure Container Apps에서 실행되는 Java 애플리케이션을 더 쉽고 효율적으로 디버그하고 문제를 해결하도록 도와줍니다. 주요 기능 중 하나는 동적 로거 수준 변경을 통해 기본적으로 숨겨진 로그 세부 정보에 대한 액세스를 허용하는 것입니다. 이 기능을 사용하면 로그 수준을 변경할 때 앱을 강제로 다시 시작하거나 코드를 수정할 필요 없이 로그 정보를 수집할 수 있습니다.

시작 전에 Azure CLI에서 Azure Container Apps 확장을 버전 0.3.51 이상으로 업그레이드해야 합니다.

az extension update --name containerapp

Java 애플리케이션에 JVM 진단 사용

Java 진단 도구를 사용하기 전에 먼저 Azure Container Apps에 JVM(Java Virtual Machine) 진단을 사용하도록 설정해야 합니다. 이 단계에서는 고급 진단 에이전트를 앱에 삽입하여 Java 진단 기능을 사용하도록 설정합니다. 이 프로세스에서 앱을 다시 시작할 수도 있습니다.

이러한 진단 도구를 활용하려면 진단 도구가 활성화된 새 컨테이너 앱을 만들거나 기존 컨테이너 앱을 업데이트할 수도 있습니다.

JVM 진단이 활성화된 새 컨테이너 앱을 만들려면 다음 명령을 사용합니다.

az containerapp create --enable-java-agent \
  --environment <ENVIRONMENT_NAME> \
  --resource-group <RESOURCE_GROUP> \
  --name <CONTAINER_APP_NAME>

기존 컨테이너 앱을 업데이트하려면 다음 명령을 사용합니다.

az containerapp update --enable-java-agent \
  --resource-group <RESOURCE_GROUP> \
  --name <CONTAINER_APP_NAME>

런타임 로거 수준 변경

JVM 진단을 사용하도록 설정한 후에는 애플리케이션을 다시 시작할 필요 없이 실행 중인 Java 앱의 특정 로거에 대한 런타임 로그 수준을 변경할 수 있습니다.

다음 샘플에서는 로그 수준이 info인 로거 이름 org.springframework.boot을(를) 사용합니다. 이러한 값을 사용자 고유의 로거 이름 및 수준과 일치하도록 변경해야 합니다.

다음 명령을 사용하여 특정 로거에 대한 로그 수준을 조정합니다.

az containerapp java logger set \
  --logger-name "org.springframework.boot" \
  --logger-level "info"
  --resource-group <RESOURCE_GROUP> \
  --name <CONTAINER_APP_NAME>

로거 수준 변경이 적용되는 데 최대 2분이 걸릴 수 있습니다. 완료되면 로그 스트림 또는 다른 로그 옵션의 애플리케이션 로그를 확인할 수 있습니다.

지원되는 Java 로깅 프레임워크

지원되는 Java 로깅 프레임워크는 다음과 같습니다.

다양한 로깅 프레임워크별로 지원되는 로그 수준

다양한 로깅 프레임워크는 서로 다른 로그 수준을 지원합니다. JVM 진단 플랫폼에서 일부 프레임워크는 다른 프레임워크보다 더 잘 지원됩니다. 로깅 수준을 변경하기 전에 사용하는 로그 수준이 프레임워크와 플랫폼 모두에서 지원되는지 확인합니다.

프레임워크 OFF FATAL 오류 WARN INFO DEBUG TRACE ALL
Log4j2
Logback 없음
jboss-logging 아니요
플랫폼 없음 아니요

일반적인 로그 수준 표시 유형

로그 수준 FATAL 오류 WARN INFO DEBUG TRACE ALL
OFF
FATAL
ERROR
WARN
INFO
DEBUG
TRACE
ALL

예를 들어 로그 수준을 DEBUG로 설정하면 앱은 수준 FATAL, ERROR, WARN, INFO, DEBUG의 로그를 인쇄하고 수준 TRACEALL의 로그는 인쇄하지 않습니다.