11.3. 로깅 하위 시스템 정보
JBoss EAP 로깅
하위 시스템은 로그 카테고리 및 로그 핸들러 의 시스템을 사용하여 구성됩니다. 로그 범주는 캡처할 메시지를 정의합니다. 로그 핸들러는 해당 메시지를 처리하는 방법을 정의합니다(예: 디스크에 작성하거나 콘솔에 전송).
로깅 프로필을 사용하면 고유하게 이름 지정된 로깅 구성 세트를 생성하고 다른 로깅 구성과는 별도로 애플리케이션에 할당할 수 있습니다. 로깅 프로필의 구성은 기본 로깅
하위 시스템과 거의 동일합니다.
11.3.1. 루트 로거
JBoss EAP 루트 로거는 지정된 로그 수준 이상의 모든 로그 메시지를 캡처하여 로그 범주에서 캡처하지 않은 서버로 전송합니다.
기본적으로 루트 로거는 콘솔과 주기적인 로그 핸들러를 사용하도록 구성됩니다. 정기적인 로그 핸들러는 server.log
파일에 작성하도록 구성됩니다. 이 파일은 종종 서버 로그라고 합니다.
자세한 내용은 루트 로거 구성을 참조하십시오.
11.3.2. 로그 카테고리
로그 범주는 캡처할 로그 메시지 집합과 메시지를 처리할 하나 이상의 로그 핸들러를 정의합니다.
캡처할 로그 메시지는 origin 및 로그 수준의 지정된 Java 패키지에 의해 정의됩니다. 해당 패키지의 클래스 및 해당 로그 수준 이상의 클래스의 메시지는 로그 범주에서 캡처되어 지정된 로그 핸들러로 전송됩니다.
일반적으로 로그 카테고리는 Java 패키지 및 클래스 이름이지만 Logger.getLogger(LOGGER_NAME)
메서드에서 지정하는 모든 이름이 될 수 있습니다.
로그 카테고리는 자체 핸들러 대신 루트 로거의 로그 핸들러를 선택적으로 사용할 수 있습니다.
자세한 내용은 로그 카테고리 구성을 참조하십시오.
11.3.3. 로그 핸들러
로그 핸들러는 캡처된 로그 메시지가 기록되는 방법을 정의합니다. 사용 가능한 로그 핸들러 유형은 console,file,periodic,size,periodic size,syslog,custom, async 입니다.
로그 핸들러를 활성화하려면 하나 이상의 로거에 추가해야 합니다.
로그 핸들러 유형
- 콘솔
-
콘솔 로그 핸들러는 호스트 운영 체제의 표준 출력,
stdout
또는 표준 오류인stderr
, 스트림에 로그 메시지를 작성합니다. 이 메시지는 명령줄 프롬프트에서 JBoss EAP를 실행하면 표시됩니다. 운영 체제가 표준 출력 또는 표준 오류 스트림을 캡처하도록 구성되지 않는 한 콘솔 로그 핸들러의 메시지는 저장되지 않습니다. - 파일
- 파일 로그 핸들러는 로그 메시지를 지정된 파일에 씁니다.
- 주기
- 주기적인 로그 핸들러는 지정된 기간이 경과할 때까지 로그 메시지를 명명된 파일에 씁니다. 기간이 경과하면 지정된 타임스탬프를 추가하여 파일의 이름이 바뀝니다. 핸들러는 원래 이름을 사용하여 새로 생성된 로그 파일에 계속 씁니다.
- 크기
- 크기 로그 핸들러는 파일이 지정된 크기에 도달할 때까지 명명된 파일에 로그 메시지를 작성합니다. 파일이 지정된 크기에 도달하면 숫자 접미사로 이름이 변경되고 핸들러는 원래 이름을 사용하여 새로 생성된 로그 파일에 계속 씁니다. 각 크기 로그 핸들러는 이러한 방식으로 보관할 최대 파일 수를 지정해야 합니다.
- 정기적인 크기
주기적인 크기 로그 핸들러는 파일이 지정된 크기 또는 지정된 기간이 경과할 때까지 명명된 파일에 로그 메시지를 씁니다. 그런 다음 파일의 이름이 바뀌고 핸들러는 원래 이름을 사용하여 새로 생성된 로그 파일에 계속 씁니다.
이는 주기적 및 크기 로그 핸들러의 조합이며 결합된 속성을 지원합니다.
- syslog
- syslog 핸들러는 메시지를 원격 로깅 서버로 보내는 데 사용할 수 있습니다. 이를 통해 여러 애플리케이션에서 모두 함께 구문 분석할 수 있는 동일한 서버에 로그 메시지를 보낼 수 있습니다.
- 소켓
- 소켓 로그 핸들러는 소켓을 통해 로그 메시지를 원격 로깅 서버로 보내는 데 사용할 수 있습니다. TCP 또는 UDP 소켓일 수 있습니다.
- 사용자 지정
-
사용자 지정 로그 핸들러를 사용하면 구현된 새로운 로그 핸들러 유형을 구성할 수 있습니다. 사용자 지정 핸들러는
java.util.logging.Handler
를 확장하고 모듈에 포함된 Java 클래스로 구현해야 합니다. Log4J appender를 사용자 지정 로그 핸들러로 사용할 수도 있습니다. - async
- 비동기 로그 핸들러는 하나 이상의 다른 로그 핸들러에 대해 비동기 동작을 제공하는 래퍼 로그 핸들러입니다. 이 기능은 네트워크 파일 시스템에 로그 파일을 작성하는 등의 대기 시간이 길거나 기타 성능 문제가 있는 로그 핸들러에 유용합니다.
이러한 각 로그 핸들러 구성에 대한 자세한 내용은 로그 핸들러 구성 섹션을 참조하십시오.
11.3.4. 로그 수준
로그 수준은 로그 메시지의 특성 및 심각도를 나타내는 열거된 값입니다. 개발자는 선택한 로깅 프레임워크의 적절한 방법을 사용하여 지정된 로그 메시지 수준을 지정하여 메시지를 보낼 수 있습니다.
JBoss EAP는 지원되는 애플리케이션 로깅 프레임워크에서 사용하는 모든 로그 수준을 지원합니다. 가장 일반적으로 사용되는 로그 수준은 TRACE
,DEBUG
,INFO
,WARN
,ERROR
, FATAL
입니다.
로그 수준은 로그 범주와 핸들러가 책임지는 메시지를 제한하도록 사용합니다. 각 로그 수준에는 다른 로그 수준에 상대적인 순서를 나타내는 숫자 값이 할당됩니다. 로그 카테고리 및 핸들러에는 로그 수준이 할당되며 해당 수준 이상의 로그 메시지만 처리합니다. 예를 들어 WARN 수준이 있는 로그 핸들러는 수준 WARN
,
ERROR
, FATAL
의 메시지만 기록합니다.
지원되는 로그 수준
로그 수준 | 현재의 | 설명 |
---|---|---|
모두 | Integer.MIN_VALUE | 모든 로그 메시지를 제공합니다. |
마케도니아 | 300 | - |
더 세분화 | 400 | - |
TRACE | 400 |
|
디버그 | 500 |
|
NICE | 500 | - |
CONFIG | 700 | - |
정보 | 800 |
|
경고 | 900 |
|
경고 | 900 | - |
ERROR | 1000 |
|
심각 | 1000 | - |
치명적 | 1100 |
|
꺼짐 | Integer.MAX_VALUE | 는 로그 메시지를 표시하지 않습니다. |
ALL
은 가장 낮은 로그 수준이며 모든 로그 수준의 메시지를 포함합니다. 이는 가장 많은 로깅을 제공합니다.
FATAL
은 가장 높은 로그 수준이며 해당 수준의 메시지만 포함합니다. 이는 최소 로깅 양을 제공합니다.
11.3.5. 로그 포맷터
포맷터는 로그 메시지를 포맷하는 데 사용됩니다. named-formatter
특성을 사용하여 로깅 핸들러에 포맷터를 할당할 수 있습니다. 로깅 핸들러 구성에 대한 자세한 내용은 로그 핸들러 구성을 참조하십시오.
로깅 하위 시스템에는 네 가지 유형의 포맷터가 포함됩니다.
Pattern Formatter
패턴 포맷터는 로그 메시지를 일반 텍스트로 포맷하는 데 사용됩니다. formatter를 로그 핸들러의 named-formatter
특성으로 사용하는 것 외에도 formatter
리소스를 먼저 생성할 필요 없이 formatter 속성으로 사용할 수도 있습니다. 패턴 구문에 대한 자세한 내용은 패턴 형식 형식 문자를 참조하십시오.
패턴 포맷터를 구성하는 방법에 대한 자세한 내용은 Configure a Pattern Formatter 를 참조하십시오.
JSON Formatter
JSON 포맷터는 JSON으로 로그 메시지를 포맷하는 데 사용됩니다.
JSON 포맷터를 구성하는 방법에 대한 자세한 내용은 JSON 로그 포맷터 구성을 참조하십시오.
XML Formatter
XML 로그 포맷터는 XML로 로그 메시지를 포맷하는 데 사용됩니다.
XML 로그 포맷터 구성 방법에 대한 자세한 내용은 XML 로그 포맷터 구성을 참조하십시오.
사용자 정의 Formatter
핸들러와 함께 사용할 사용자 지정 포맷터입니다. 대부분의 로그 레코드는 printf 형식으로 포맷됩니다. 포맷터는 메시지를 올바르게 포맷하기 위해 org.jboss.logmanager.ExtLogRecord#getFormattedMessage()
를 호출해야 할 수 있습니다.
사용자 지정 로그 포맷 터를 구성하는 방법에 대한 자세한 내용은 사용자 지정 로그 포맷터 구성을 참조하십시오.
11.3.6. 필터 표현식
filter-spec
특성을 사용하여 구성된 필터 표현식은 다양한 기준에 따라 로그 메시지를 기록하는 데 사용됩니다. 필터 검사는 항상 포맷되지 않은 원시 메시지에서 수행됩니다. 로거 또는 핸들러에 대한 필터를 포함할 수 있지만 logger 필터는 핸들러에 배치된 필터보다 우선합니다.
루트 로거에 지정된 filter-spec
은 다른 로거에서 상속되지 않습니다. 대신 핸들러별로 filter-spec
을 지정해야 합니다.
표 11.3. 로깅을 위한 필터 표현식
필터 표현식 | 설명 |
---|---|
수락 | 모든 로그 메시지를 수락합니다. |
deny | 모든 로그 메시지를 거부합니다. |
not[filter expression] | 단일 필터 표현식의 반전된 값을 반환합니다. 예를 들면 다음과 같습니다.
|
모두[filter 표현식] | 쉼표로 구분된 필터 표현식 목록에서 연결된 값을 반환합니다. 예를 들면 다음과 같습니다.
|
any[filter 표현식] | 쉼표로 구분된 필터 표현식 목록에서 하나의 값을 반환합니다. 예를 들면 다음과 같습니다.
|
levelChange[level] | 지정된 수준으로 로그 레코드를 업데이트합니다. 예를 들면 다음과 같습니다.
|
수준[수준] | 쉼표로 구분된 수준 목록에 나열된 수준으로 로그 메시지를 필터링합니다. 예를 들면 다음과 같습니다.
|
levelRange[minLevel,maxLevel] |
지정된 수준 범위 내에서 로그 메시지를 필터링합니다.
|
match["pattern"] | 제공된 정규 표현식을 사용하여 로그 메시지를 필터링합니다. 예를 들면 다음과 같습니다.
|
substitute["pattern","replacement value"] | 첫 번째 일치 패턴(첫 번째 인수)을 대체 텍스트(두 번째 인수)로 대체하는 필터입니다. 예를 들면 다음과 같습니다.
|
substituteAll["pattern","replacement value"] | 패턴의 모든 일치 항목(첫 번째 인수)을 대체 텍스트(두 번째 인수)로 바꾸는 필터입니다. 예를 들면 다음과 같습니다.
|
관리 CLI를 사용하여 필터 표현식을 구성할 때 값이 문자열로 올바르게 처리되도록 필터 텍스트에서 쉼표 및 따옴표 표시를 이스케이프해야 합니다. 쉼표와 따옴표 앞에 백슬래시(\) 앞에 표시하고 전체 표현식을
따옴표로 묶어야 합니다. 다음은 alternative All("WFLY","YLFW")
을 올바르게 이스케이프하는 예입니다.
/subsystem=logging/console-handler=CONSOLE:write-attribute(name=filter-spec, value="substituteAll(\"WFLY\"\,\"YLFW\")")
11.3.7. 암시적 로깅 종속성
기본적으로 JBoss EAP 로깅
하위 시스템은 암시적 로깅 API 종속성을 배포에 추가합니다. 기본적으로 true
인 add-logging-api-dependencies
특성을 사용하여 이러한 암시적 종속성이 배포에 추가되는지 여부를 제어할 수 있습니다.
관리 CLI를 사용하면 암시적 로깅 API 종속성이 배포에 추가되지 않도록 add-logging-api-dependencies
속성을 false
로 설정할 수 있습니다.
/subsystem=logging:write-attribute(name=add-logging-api-dependencies, value=false)
로깅
하위 시스템의 암시적 종속성에 대한 자세한 내용은 JBoss EAP 개발 가이드의 Implicit 모듈 종속성 섹션을 참조하십시오.