(vert.x) vertx.log 로그파일 위치 변경하기
vert.x 로그에 대한 내용은 여기를 참고를 하면 된다. 요약하자면
각각의 verticle 은 자신의 logger를 가지는데, verticle 내부에서 가져와서 사용할 수가 있다. 로그 파일은 기본적으로 vertx.log 파일로 기록이 되고, system temp 디렉토리에
남겨지게 된다.기본적으로 JUL(java.util.logging)을 사용한다. 이것은
$VERTX_HOME(설치한 위치)\conf\logging.properties 파일을 이용해서 설정할수가 있다.
이렇게 요약을 할 수 있는데, 사용하는 부분은 본 포스팅의 아랫 부분에서 설명하기로 하고 일단 위의 설명에서 보면 system temp 디렉토리에 vert.x 로그 파일이 출력된다고 되어 있는데, OSX 기준으로 /tmp 폴더에 생겨야 하는 파일은 사실은 find 명령어로 찾아 보면 아래의 위치에서 나오고 있다.
완전 듀스상태다. 저긴 또 어딘데 왜 로그파일이 저기 생길까? 내가 원하는것은 현재 vert.x 가 실행되는 디렉토리 아래의 logs 폴더 내에 생기거나 혹은 사용자 디렉토리 내에 쓰기를 원하는데 말이다.
이러한 부분의 수정을 위해서는 위에 요약한것 처럼 vertx.log 파일의 설정을 조절할 수 있는 $VERTX_HOME(설치한 위치)\conf\logging.properties 를 살펴봐야 한다. logging.properties 파일을 열면 아래와 같은 내용이 출력된다.
vert.x 에서는 기본적으로 JUL (j ava.u til.l ogging)을 사용하는데 해당 부분에 대한 java doc을 참고하면 더 많은 정보를 얻을수가 있다. 다양한 설정들이 있지만 일단은 내가 원하는 위치에 vertx.log 파일을 생성하기 위해서는 java.util.logging.FileHandler.pattern
부분을 수정해야 한다. 해당 부분을 보면 vertx.log 앞에 %t 라고 쓰여져 있는데 이것을 일종의 예약어 같은 것으로 아래와 같은 의미를 가지고 있다.
- “%t” the system temporary directory - “%h” the value of the “user.home” system property - “%g” the generation number to distinguish rotated logs - “%u” a unique number to resolve conflicts - “%%” translates to a single percent sign “%”
아래와 같이 설정을 한후, 이전 포스팅의
JsonVertxModule
내 start()
함수에서 기존의 System.out.println()
을 이용하던 부분 대신에 container.getLogger()
함수를 이용해서 logger를 가져와서 다음과 같이 같은 서버 시작 메시지를 남기도록 하였다.
container
는 Verticle 클래스의 멤버 변수이다. getLogger()
를 통해서 로그를, getConfig()
를 통해서 설정을 가져올수가 있게 되어 있다. JsonVertxModule
클래스가 Verticle 클래스를 상속 받기 때문에 이것이 가능한 것이고, 본 글의 제일 앞 부분에서 언급했던 각각의 verticle 이 자기자신의 logger를 가져올수 있다는 부분이 container.getLogger()
를 이야기 하는 것이다 .
테스트를 해보면 다음과 같이 실행된 위치에 logs 디렉토리 내에 vertx.log 가 생기는 것을 볼 수 있다. 이때에 당연히 logs 디렉토리가 없으면 에러가 발생되게 된다.
logging.properties 에 다른 부분들은 JUI에 대한 부분이기 때문에 자바 문서를 한번 보는 것이 필요하다고 생각한다. 다음 포스팅에서 logging.properties 내 다른 JUI 다른 설정들이 의미하는 것과 그리고 log4j, slf4j 등의 다른 로거들을 사용하려면 어떻게 해야하는지 알아보도록 하겠다.