Java 에이전트를 사용하면 문맥적 로그를 확보하여, 다른 뉴렐릭 데이터의 문맥으로 앱 로그를 볼 수 있습니다. 이 기능에 대한 일반 정보는 문맥적 APM 로그를 참조하십시오.
자동 문맥적 로그 옵션
지원되는 프레임워크를 사용하는 경우 APM 문맥적 로그를 구성하여 앱의 로그를 보내고 메타데이터를 자동으로 뉴렐릭에 연결하는 두 가지 옵션이 있습니다. 한 가지 옵션은 로그를 장식할 로그 확장을 수동으로 구성한 다음 스스로에게 전달하는 것입니다. 다른 옵션은 Java 에이전트가 자동으로 로그 장식과 전달을 처리하도록 하는 것입니다. 자동 문맥적 로그에 대해 지원되는 프레임워크는 다음과 같습니다.
Log4j1 1.2.17
Log4j 2 2.6 이상
Logback 1.1 이상
JUL (java.util.logging) JDK 8+
JBoss 로깅 1.3.0.Final에서 2.x까지
Dropwizard 로깅(Logback 계측을 통해 캡처됨, 아래 알려진 문제 참조)
중요
JBoss 로깅
JBoss Logging은 로컬 장식 기능을 JUL 계측에 위임하므로, 다음 두 계측 모듈에 의해 완전히 제어될 수 있습니다.
class_transformer:
com.newrelic.instrumentation.java.logging-jdk8:
enabled: true
com.newrelic.instrumentation.jboss.logging:
enabled: true
중요
Dropwizard 로깅의 알려진 문제
기본적으로 Dropwizard는 로깅 백엔드에 Logback을 사용합니다. 또한 Logback을 통해 모든 java.util.logging, Log4j 및 Apache Commons Logging을 라우팅합니다. Java 에이전트가 Logback 외에 다른 로깅 라이브러리를 계측하는 경우, 이 라우팅 동작으로 인해 중복 로그가 뉴렐릭에 보고될 수 있습니다.
Dropwizard 로깅을 사용할 때 중복 로그가 보고되지 않도록 하려면 Logback을 제외한 모든 로깅 프레임워크 계측을 비활성화하는 것이 좋습니다. 이는 에이전트 구성 yaml에서 기존 class_transformer 스탠자를 사용하여 아래와 같이 수행할 수 있습니다.
class_transformer:
com.newrelic.instrumentation.logback-classic-1.2:
enabled: true
com.newrelic.instrumentation.apache-log4j-1:
enabled: false
com.newrelic.instrumentation.apache-log4j-2:
enabled: false
com.newrelic.instrumentation.java.logging-jdk8:
enabled: false
com.newrelic.instrumentation.jboss.logging:
enabled: false
중요
에이전트 릴리스 7.7.0 이상에는 기본적으로 에이전트 구성 파일에서 이 기능이 활성화되어 있습니다.
에이전트 로그 전달은 지원되는 프레임워크가 감지되면 데이터 소비를 증가시킵니다. 그 양은 애플리케이션과 애플리케이션이 생성하는 로그의 양에 따라 다릅니다. 이 기능은 비활성화할 수 있습니다. 옵션에 대한 보다 자세한 내용은 자동 로깅 비활성화를 참조하십시오.
이미 로그 전달 솔루션을 사용하는 경우 이 기능을 비활성화해야 합니다.
Java 에이전트가 로그를 전달하도록 하지 않고 자체 로그 전달자를 사용하려는 경우, 수동 문맥적 로그 솔루션이 트레이스 컨텍스트 메타데이터로 로그를 장식하는 데 적합한 솔루션입니다.
이는 가장 간단한 접근 방식이며, 로그 전달자 설정에 대한 액세스 권한이나 관심이 없는 개발자, 또는 많은 오버 헤드 없이 앱 컨텍스트에서 로그와 기타 연결 메타데이터의 역량을 확인하려는 계정에 적합한 선택입니다.
이 옵션을 사용하면, 에이전트가 span.id, trace.id, hostname, entity.guid 및 entity.name을 추가합니다. 로그 전달의 제한 사항을 확인해 보십시오.
이 기능은 기본적으로 활성화되어 있습니다.
로그 전달 기능이 있는 에이전트 버전(Java 에이전트 7.6.0 이상)을 설치하기만 하면 됩니다. 전달 기능이 비활성화된 경우 다음 구성을 사용할 수 있습니다.
기존 로그 전달 솔루션이 있고 자동 문맥적 로그를 사용하도록 에이전트를 업데이트하는 경우 수동 로그 전달자를 비활성화해야 합니다. 그렇지 않으면 앱에서 이중 로그 라인이 전송됩니다. 계정에 따라 이중 요금이 발생할 수 있습니다. 보다 자세한 내용은 특정 로그 전달자를 비활성화하는 절차를 확인하십시오.
선호하는 로그 전달자를 사용할 수 있습니다. Java 에이전트는 자동 문맥적 로그 기능에 대한 액세스를 제공하는 데 필요한 연결 메타데이터로 로그를 장식할 수 있으며 수동 로그 전달자를 사용하여 이를 뉴렐릭으로 보낼 수 있습니다.
일반적으로 로그는 활성화한 후 1분 이내에 나타나기 시작합니다. 컨텍스트에 로그인합니다. 앱의 Triage > Logs 섹션을 확인하십시오. 또한 오류와 관련된 로그 패턴이 표시되기 시작합니다.
오류 또는 트레이스에 대한 로그가 표시되지 않으면 앱에 대한 로그가 없는 것일 수 있습니다. UI 페이지를 새로고침하거나 선택한 기간을 변경합니다.
자동 로깅 비활성화
APM 문맥적 로그는 에이전트 로그 데이터를 자동으로 전달하며 기본적으로 활성화되어 있습니다. 이는 보안, 규정 준수, 청구 또는 시스템 성능에 부정적인 영향을 미칠 수 있습니다. 보다 자세한 내용을 확인하거나 기본 설정을 조정해야 하는 경우 절차에 따라 자동 로깅을 비활성화합니다.
수동 문맥적 로그 옵션
언어 에이전트가 로그를 전달하고 장식할 수 있기 전에는, 수동 솔루션을 사용하여 연결 메타데이터를 보낼 수 있었습니다.
이 옵션은 계속 지원되지만 더 이상 권장되지 않습니다. 또한 이 방법을 사용하려면 문맥적 로그를 활성화하기 전에 로그 전달자를 설치해야 합니다. 로그 전달자가 없는 경우 뉴렐릭 UI에 인프라 에이전트를 사용하라는 메시지가 표시됩니다.
기존 로그 전달 솔루션을 사용하고 자동 문맥적 로그를 사용하도록 에이전트를 업데이트하는 경우 수동 로그 전달자를 비활성화해야 합니다. 그렇지 않으면 앱에서 이중 로그 라인이 전송됩니다. 계정에 따라 이중 요금이 발생할 수 있습니다. 보다 자세한 내용은 특정 로그 전달자를 비활성화하는 절차를 확인하십시오.
Java 컨텍스트에서 수동 프로세스를 사용하여 로그를 설정해야 하는 경우 다음 단계를 따르십시오.
뉴렐릭에서 이미 로그인을 설정했는지 확인합니다. 여기에는 애플리케이션 로그를 수집하고 뉴렐릭으로 전달되는 메타데이터를 확장할 수 있도록 지원하는 로그 전달자 구성이 포함됩니다.
최종 핸들러에 NewRelicFormatter을 사용합니다. 다음 예와 같이 formatter 속성을 설정하도록 로깅 속성 파일을 업데이트합니다. 포맷터를 설정한 핸들러가 이전 단계의 target 핸들러인지 확인합니다. (이 예에서는 java.util.logging.FileHandler임)
뉴렐릭 로그 포맷은 트랜잭션과 로그를 함께 연관시키는 데 사용되는 텔레메트리 메타데이터가 포함된 JSON입니다. 현재 이 커스텀 포맷은 지원되지 않습니다.
완료되면 텍스트 대신 JSON이 로깅됩니다. JSON은 한 줄에 하나씩 단일 객체로 포맷이 지정되어야 하며 log.level 및 thread.name 같은 필드를 포함해야 합니다. 문맥적 로그에 필요한 trace.id에는 트랜잭션 내에서 발생하는 로그 메시지에 대한 값만 있어야 합니다.
문맥적 로그 확장을 가져오는 가장 직접적인 방법은 이러한 종속성을 Maven의 pom.xml 또는 Gradle의 build.gradle에 추가하는 것입니다. 이를 통해 패키징 툴이 올바른 종속성을 선택할 수 있습니다.
이러한 파일을 수집할 수 없는 경우 로깅 프레임워크 구성을 위해 jar를 대신 애플리케이션 classpath에 직접 추가할 수 있습니다.
NewRelicAsyncAppender로 로깅 구성 xml을 업데이트합니다. NewRelicAsyncAppender가 뉴렐릭의 로그 전달자를 대상으로 하는 모든 어펜더를 래핑하도록 하려면 다음 섹션을 추가합니다. "LOG_FILE"을 이전 단계에서 업데이트한 어펜더의 이름으로 변경합니다.
NewRelicAsyncAppender가 로거에서 사용되는 첫 번째 어펜더인지 확인합니다. 루트 로거의 어펜더를 이전 단계에서 생성된 ASYNC 어펜더로 교체합니다. 그런 다음 <root> 목록에서 NewRelicAsyncAppender뒤에 다른 모든 어펜더를 나열합니다.
<root>
<appender-ref ref="ASYNC" />
</root>
다음은 Logback 확장에 대한 업데이트된 로깅 .xml 파일의 예입니다. GitHub 에서 작업 예시를 확인할 수도 있습니다.
종속 항목에 spring-boot-starter-log4j2이 있는 경우 log4j 2.x를 사용하고 있는 것입니다. 기본 구성에 대한 자세한 정보는 Spring Boot log4j 2.x 문서를, 구성의 사용자 정의에 대한 자세한 정보는 뉴렐릭 log4j 2 확장을 참조하십시오.
Spring Boot를 사용하고 있지만 starter-log4j2은 사용 하지 않는 경우 기본적으로 logback을 사용하고 있는 것입니다. 기본 구성에 대해서는 Spring Boot logback 문서를, 구성의 사용자 정의에 대한 자세한 정보는 뉴렐릭 logback 확장을 참조하십시오.
Spring 사용 시(Spring Boot 미사용):
Spring 5 이상:
Spring은 자동으로 찾을 다른 로깅 라이브러리에 대한 브리지를 구현합니다. 그러나 이러한 개별 라이브러리는 구성을 하고 프로젝트 종속성에 명시적으로 포함시켜야 합니다.
로깅 종속성을 식별하려면 Gradle, Maven 또는 기타 빌드 툴의 종속성 트리를 참조하십시오. 이 확장을 사용하여 Java 앱에 대한 문맥적 로그를 구성하려면 다음 단계를 따릅니다.