로깅
로깅(logging)이란 시스템의 작동 정보인 로그(log)를 기록하는 행위를 말한다. 시스템이 작동할 때 시스템의 작동 상태의 기록과 보존, 이용자의 습성 조사 및 시스템 동작의 분석 등을 하기 위해 작동 중의 각종 정보를 기록해둘 필요가 있는데, 이 기록을 만드는 것을 로깅이라 한다. 즉 로그 시스템의 사용에 관계된 일련의 사건을 시간의 경과에 따라 기록하는 것이다. 실행한 프로그램의 이름, 콘솔로부터의 키인, 이상 사태 발생, 정지 상태, 컴퓨터의 사용 시간, 입출력 장치의 사용 개시와 사용 종료 시간 등을 기록하는 것으로 이렇게 해서 기록된 것을 로그라고 한다.
목차
개요
시스템을 작동할 때 시스템의 작동상태 기록, 보존, 이용자의 습성조사 및 시스템 동작의 분석 등을 하기 위해 작동 중의 각종 정보를 기록하여 둘 필요가 있다. 이 기록을 만드는 것을 로깅이라 한다. 또 기록 자체를 로그라고 한다.[1]
로그들은 테스트할 때 재현하기 힘든 버그가 개발 완료된 환경에서 발생했을 경우, 그런 버그들에 대한 정보를 알려줄 수 있으며, 구문들 사이에 걸리는 시간 등의 성능에 관한 통계와 정보를 제공할 수 있다. 로그가 제공하는 정보의 양은 프로그램이 실행되는 중에도 설정이 가능한 것이 이상적이다. 설정이 가능할 때, 로그는 예기치 못한 특정 문제들을 디버그하기 위해 코드를 수정하고 다시 적용하지 않아도, 일반적인 정보를 갈무리할 수 있게 해 준다. 초보자들은 프로그래밍에 대해 아는 것에 한계가 있기 때문에 로그를 사용해야 하고, 시스템 설계자들은 시스템의 복잡성 때문에 로그를 이해하고 사용해야 한다.[2]
특징
로깅은 "비 기능 요구사항(Non Functional Requirement)"에 속한다. 그러나 고객의 요구 여부에 상관없이 로그 출력 기능은 프로그램 개발 중 디버깅 및 개발 완료 후 문제 발생 시 원인 분석을 위해 좋은 프로그램이 필수적으로 갖추어야 하는 요구조건에 속한다.
로그 라이브러리
- java.util.logging
JDK(Java Development Kit) 1.4버전부터 자바에 포함된 표준 로깅 API이다. 별도의 라이브러리를 추가할 필요가 없다. 하지만 기능이 많이 부족하여 다른 로그 라이브러리를 더 많이 사용한다.
- Apache Commons logging
아파치 재단이 웹 서버나 톰켓 서버만 제공하는 것은 아니다. 오히려 아파치 제단에서 제공하는 다양한 오픈 소스 자바 라이브러리들이 아파치 재단의 영향력을 잘 보여준다. 그 중에서 Commons 라이브러리는 프로그램의 기초를 단단히 다지고자 하는 사람들에게 매우 효율적이다. Commons 라이브러리 중에서 로그 출력 기능을 제공하는 라이브러리가 Commons Logging 이다.
- Log4j
아파치 재단에서 제공하며, 가장 많이 사용되는 라이브러리다. Log4j version 2 부터는 JAVA 6 이상이 필요하다.
- Logback
Log4j를 개발한 Ceki Gulcu가 Log4j의 단점을 개선하고 기능을 추가하여 개발한 로깅 라이브러리다. 스프링에서는 기본적으로 commons.logging 라이브러리(Apache의 JCL, Jakarta Commons Logging)을 사용한다. 즉 스프링 개발을 할 때 스프링이 뿜어내는 메시지는 JCL에 의존하여 로그를 남기는 것이다. 실제로 spring-context 라이브러리를 설치할 때 프로젝트 폴더의 메이븐 라이브러리(Maven Libarary)를 확인해 보면 commons.logging 라이브러리를 확인할 수 있다. 예전에는 스프링에서 로그를 남길 때 Log4J를 사용했는데, 성능 및 기능상의 이유로 대체 로거(logger)들이 많아졌고, 현재 대부분은 SLF4J 인터페이스를 구현한 Logback을 사용한다. Spring이 기존에 사용하던 로그 라이브러리 JCL 대신, 새로운 라이브러리 Logback을 사용하도록 하기 위해서는 SLF4J가 필요하다. 즉 SLF4J는 JCL과 Log4J의 징검다리 역할을 한다. [2] [3] [4]
SLF4J 라이브러리
다양한 로깅 라이브러리들을 하나의 통일된 방식으로 사용할 수 있는 방법을 제공해주는 라이브러리이다. 로깅에 대한 추상 레이어를 제공하는 것이며 interface의 모음이다. [5]
로그레벨(Log level)과 어팬더(Appender)
- Log level
trace : debug보다 세분화된 정보
debug : 디버깅하는데 유용한 세분화된 정보
info : 진행 상황 같은 일반 정보
warm : 오류는 아니지만, 잠재적인 오류 원인이 될 수 있는 경고성 정보
error : 요청을 처리하는 중 문제가 발생한 오류 정보
- Appender
ConsoleAppender : 콘솔에 로그를 어떤 포맷으로 출력할지를 설정할 때 사용
FileAppender : 파일에 로그를 어떤 포맷으로 출력할지를 설정
RollingFileAppender : 로그의 양이 많아지면, 하나의 파일로 관리하기 어려워지는 경우가 생기는데, 이런 문제를 해결하기 위해 하루 단위로 로그를 관리하고자 할 경우 사용[5]
기능
로깅 서비스에는 추가 기능을 사용할 수 있도록 해주는 여러 가지의 특수 기능이 있다. 이러한 기능에는 보안 로깅 사용, 명령줄 로깅 및 원격 로깅이 포함된다.
보안 로깅
로깅 기능에 추가 보안 수단을 적용한다. 보안 로깅은 보안 로그의 인증되지 않은 변경이나 손상을 감지할 수 있게 한다. 이 기능을 사용하기 위해서는 특별한 코딩이 필요하지 않다. 보안 로깅은 시스템 관리자가 구성한 미리 등록된 인증서를 사용하여 수행된다. 이러한 MAC(Manifest Analysis and Certification)는 모든 로그 레코드에 대해 생성 및 저장된다. 특수 서명 로그 레코드가 정기적으로 삽입되어 해당 지점에 기록된 로그의 내용에 대한 서명을 나타낸다. 두 레코드의 조합으로 로그가 손상되지 않았음을 확인할 수 있다.
- 보안 로깅을 사용하는 방법
1. 이름이 로거(Logger)인 인증서를 만들어 액세스 관리 서브 시스템(Access Manager)을 실행 중인 배포 컨테이너에 설치한다.
2. 액세스 관리 서브 시스템 콘솔을 사용하여 로깅 서비스 구성에서 보안 로깅을 활성화하고 변경 내용을 저장한다. 관리자로 로깅 서비스의 다른 속성에 대한 기본값도 수정할 수 있다. 로깅 디렉터리가 기본 디렉터리에서 변경된 경우 권한이 0700으로 설정되어있는지 확인한다. 로깅 서비스는 디렉터리가 없으면 만들지만, 원한이 0755로 설정된 디렉터리를 생성하게 된다. 또한 기본값에서 다른 디렉터리를 지정하는 경우 웹 컨테이너의 server.policy 파일에 있는 다음 매개변수를 새 디렉터리로 변경해야 한다.
3. AccessManager-base/SUNWam/config 디렉터리에 인증서 데이터베이스 비밀번호를 포함한 파일을 만들고 이름을 .wtpass로 지정한다.
4. 서버를 다시 시작한다. 보안 로깅 시작 시에 /var/opt/SUNWam/debug/amLog 파일에 잘못된 확인 오류가 기록될 수 있으므로 보안 로그 디렉터리를 지워야 한다. 보안 로그의 허용되지 않은 변경 및 손상을 검색하려면 확인 프로세스에 의해 /var/opt/SUNWam/debug/amLog에 잘못 기록된 오류 메시지를 검색한다.
액세스 관리 서브 시스템(Access Manager) 구성 요소 로그 구성 요수 로그 파일 이름 접두어 기록 정보 세션 amSSO 로그인 시간, 로그아웃 시간, 시간 초과 제한과 같은 세션 관리 속성 값 관리 콘솔 amConsole Identity 관련 객체, 영역, 정책의 생성, 삭제, 수정과 같이 관리 콘솔을 통해 수행된 사용자 작업 인증 amAuthentication 사용자 로그인 및 로그아웃 아이디 연합 amFederation 인증 도메인 생성 및 호스트 공급자 생성 등의 연합 관련 이벤트 인증(정책) amPolicy 정책 생성, 삭제 또는 수정 및 정책 평가와 같은 정책 관련 이벤트 정책 에이전트 amAgent 사용자가 액세스했거나 사용자에 대한 액세스가 거부된 자원 관련 예외 SAML amSAML 명제, 아티팩트 생성 또는 삭제, 응답 및 요청 세부 정보, SOAP 오류와 같은 SAML 관련 이벤트 명령줄 amAdmin 명령줄 도구를 사용한 작업 도중 발생한 이벤트 오류
명령줄 로깅
amadmin 명령줄 도구를 사용해 디렉터리 서버에서 Identity 객체를 생성, 수정 및 삭제할 수 있다. 이 도구는 또한 서비스 템플리트를 로드, 생성 및 등록할 수 있다. 로깅 서비스는 -t 옵션을 호출하여 이러한 작업을 기록할 수 있다.
원격 로깅
액세스 관리 서브 시스템은 원격 로깅을 지원한다. 따라서 클라이언트 응용 프로그램은 액세스 관리 서브 시스템 SDK가 설치된 호스트를 사용하여 원격 시스템에 배포된 액세스 관리 서브 시스템 인스턴스에 로그 레코드를 생성할 수 있다. 원격 로깅은 다음 중 하나의 시나리오에 의해 시작된다.
1. 액세스 관리 서브 시스템 인스턴스의 이름 지정 서비스에 있는 로깅 URL이 원격 인스턴스를 가리키고 이 둘 사이에 신뢰 관계가 구성되어 있는 경우 원격 액세스 관리 서브 시스템 인스턴스에 로그가 기록된다.
2. 액세스 관리 서브 시스템 SDK가 원격 액세스 관리 서브 시스템 인스턴스에 대해 설치되어 있고 클라이언트가 로깅 API를 사용하는 SDK 서버에서 실행 중이면서 원격 액세스 관리 서브 시스템 시스템에 로그가 기록된다.
3. 액세스 관리 서브 시스템 에이전트가 로깅 API를 사용하는 경우 로그가 기록된다.[6]
각주
참고자료
- 컴퓨터인터넷IT용어대사전, 〈로깅〉, 《네이버 지식백과》, 2019-03-20
- 정보통신용어사전, 〈로깅〉, 《네이버 지식백과》, 2008-01-15
- enai, 〈로깅에 대하여〉, 《티스토리》, 2019-09-12
- sunnykwak, 〈자바 로깅(logging) 기술 소개〉, 《티스토리》, 2015-03-16
- victolee, 〈[Spring 로그 남기기 ( Logback )]〉, 《티스토리》, 2018-03-31
같이 보기