WAS 로그 종류
-
- catalina.out 로그 : 어플리케이션에서 설정한 로그 기록(WAS 기동/중지, DB 쿼리 등)
- Access 로그 : WAS 서버에 대한 요청 로그, 서버가 클라이언트의 요청에 의해 반환한 HTTP 상태 코드 (200, 4XX, 5XX 등) 등 확인 가능
- GC 로그 : GC 이벤트가 발생한 로그 기록 확인 가능
1) catalina.out 로그
- 기동
01-Oct-2021 10:00:00.123 INFO [main]org.apache.catalina.startup.Catalina.start Server startup in [1234]milliseconds
→ 기동 되었을 때 찍히는 로그. 해당 로그가 찍히더라도 비정상으로 서비스가 올라왔을 수 있으니 서비스 확인은 필수
- 중지
01-Oct-2021 10:30:00.456 INFO [main]org.apache.coyote.http11.Http11NioProtocol.pause Pausing ProtocolHandler ["http-nio-8080"]
01-Oct-2021 10:30:00.789 INFO [main]org.apache.catalina.core.StandardService.stopInternal Stopping service [Catalina]
01-Oct-2021 10:30:01.000 INFO [main]org.apache.coyote.http11.Http11NioProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"]
→ 중지 되었을 때 찍히는 로그
- OutOfMemoryError(OOME)
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.base/java.util.Arrays.copyOf(Arrays.java:3745)
at java.base/java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:172)
at java.base/java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:538)
at java.base/java.lang.StringBuilder.append(StringBuilder.java:174)
at com.example.MyApp.processData(MyApp.java:45)
→ OOME가 발생 되었을 때 찍히는 로그
→ 오류가 발생한 코드의 위치와 스택이 로그에 남음
→ 서비스 확인이 우선적으로 필요하며 Heap Memory 조정, 로직 호출 방식 수정 등으로 추후 조치 가능
- 기타
## 예외 로그
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "str" is null
at com.example.MyApp.processData(MyApp.java:34)
## 경로 로그
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.example.Internals (file:/path/to/app.jar) to method java.base/jdk.internal.misc.Unsafe.allocateMemory(long)
WARNING: Please consider reporting this to the maintainers of com.example.Internals
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
##보안 로그
SECURITY ALERT: Unauthorized access attempt detected. User: unknown, IP: 192.168.1.100
SECURITY: Failed login attempt for username 'admin' from IP 192.168.1.100
SECURITY: Password change requested for user JohnDoe
→ 로그 레벨에 따라 찍히는 로그가 다름.
2) Access 로그
## 예시
1.1.1.1 - - [21/May/2024:00:00:40 +0900] "GET / HTTP/1.1" 200 201 0
pattern="%h %l %u %t "%r" %s %b %D"
- 1.1.1.1 : 클라이언트의 IP 주소
- -: 원격 사용자 이름. "-"는 웹 서버가 사용자 이름을 결정하지 못했음을 나타냅니다. 웹 서버가 RFC 1413에 따라 원격 사용자 이름을 확인하도록 설정된 경우에만 사용 가능
- -: 인증된 사용자 이름."-"는 사용자가 인증되지 않았음을 나타냅니다. 웹 서버가 HTTP 인증을 사용하여 사용자를 인증하도록 설정된 경우에만 사용 가능
- [21/May/2024:00:00:40 +0900]: 요청이 발생한 시간. 이 형식은 "[day/month/year:hour:minute:second timezone]"
- "GET / HTTP/1.1": 요청 라인. "GET"은 HTTP 메소드, "/"는 요청된 리소스의 URI, "HTTP/1.1"은 사용된 HTTP 프로토콜의 버전
- 200: 서버가 클라이언트에게 반환한 HTTP 상태 코드 200은 정상 응답하였음을 의미
- 201: 서버가 클라이언트에게 보낸 응답의 바이트 크기. 서버는 201바이트의 데이터를 클라이언트에게 보냈으며, HTTP 헤더를 포함하지 않고 본문만 포함
- 0: 요청 응답 시간(밀리초)
3) GC 로그
## GC 예시
2021-10-28T13:23:45.123+0000: [GC (Allocation Failure) [PSYoungGen: 512K->64K(1024K)]512K->72K(2048K), 0.0016754 secs][Times: user=0.00 sys=0.00, real=0.00 secs]
- 2021-10-28T13:23:45.123+0000: 로그가 기록된 시간
- [GC (Allocation Failure)]: 가비지 컬렉션이 발생한 이유. 여기서는 'Allocation Failure'로, 새로운 객체를 할당하기 위한 공간이 충분하지 않아 GC가 트리거되었음을 의미
- [PSYoungGen: 512K->64K(1024K)]: Young 영역의 가비지 컬렉션 전후의 메모리 사용량과 총 크기
- 512K->72K(2048K): 전체 힙 메모리의 사용량이 가비지 컬렉션 전후로 어떻게 변했는지 보여줌. '2048K'는 전체 힙 크기
- 0.0016754 secs: 가비지 컬렉션을 수행하는 데 걸린 시간(초).
- [Times: user=0.00 sys=0.00, real=0.00 secs]: 가비지 컬렉션 동안의 CPU 시간 사용량
## Full GC 예시
2021-10-28T13:23:45.123+0000: [Full GC (Metadata GC Threshold) [PSYoungGen: 512K->0K(1024K)][ParOldGen: 1024K->788K(2048K)]1536K->788K(3072K), [Metaspace: 2703K->2697K(1056768K)], 0.0323945 secs][Times: user=0.05 sys=0.00, real=0.03 secs]
- 2021-10-28T13:23:45.123+0000: 로그가 기록된 시간
- [Full GC (Metadata GC Threshold)]: Full GC가 발생한 이유. 'Metadata GC Threshold'는 메타스페이스가 일정 임계값에 도달하여 Full GC가 트리거되었음을 의미
- [PSYoungGen: 512K->0K(1024K)]: Young 영역의 가비지 컬렉션 전후의 메모리 사용량과 총 크기
- [ParOldGen: 1024K->788K(2048K)]: Old 영역의 가비지 컬렉션 전후의 메모리 사용량과 총 크기
- 1536K->788K(3072K): 전체 힙 메모리의 사용량이 가비지 컬렉션 전후로 어떻게 변했는지 보여줌. '3072K'는 전체 힙 크기
- [Metaspace: 2703K->2697K(1056768K)]: 메타스페이스의 사용량과 총 크기. 메타스페이스는 클래스 메타데이터를 저장하는 공간으로, PermGen의 대체(Java 1.7은 Perm, Java 1.8 이상은 Metaspace)
- 0.0323945 secs: 가비지 컬렉션을 수행하는 데 걸린 시간(초)
- [Times: user=0.05 sys=0.00, real=0.03 secs]: 가비지 컬렉션 동안의 CPU 시간 사용량