ASH84

Software Engineer/Developer, co-founder of Payhere. Ex-Banksalad. Intereseted in iteroperability, bootstrap company, writting.

(vert.x) logging.properties 파헤치기

created:2013-05-25
updated:2013-05-25
edit

앞선 포스팅에서 logging.properties 를 이용해서 로그파일인 vertx.log 파일의 위치를 변경하였는데 이번에는 logging.properties내 설정된 다른 항목들을 보도록 하자. 

JUL 기반으로 되어 있다는 것을 앞서서 애기했는데, 사실 저 설정들은 모두 자바 문서에 명시가 되어 있는 부분이다. 


#n : 라인수 

*#1 : handlers 부분에 두개의 핸들러, ConsoleHandler, FileHandler 를 지정하고 있다. *

FileHandler

– 간단한 파일 로깅 핸들러로, 특정 파일에 쓰거나 여러파일에 돌아가면서 쓰는 역할을 한다. 여러 파일에 쓰기 위해서는 각각의 파일에 주어진 사이즈 한계에 도달하면 그 파일을 닫고 새로운 파일을 열어서 쓰는 작업을 수행을 하며, 이때에는 파일이름에 0, 1, 2 이런식으로 이름이 붙게 된다. 기본적으로 버퍼에 쓰고 각각의 로그 쓰기가 끝나는 시점에 flush가 된다. 기본적인 포맷터는 XMLFormatter를 사용하도록 설정되어 있다. 

– 설정하는 방법 : 기본적으로 각각의 FileHandler 는 아래의LogManager설정에 따라서 초기화 된다. 특정하기 지정하지 않으면 기본설정으로 동작한다. 



- java.util.logging.FileHandler.level : Handler의 로그 레벨 설정 (defaults to Level.ALL). - java.util.logging.FileHandler.filter : Filter 클래스의 이름 지정 (defaults to no Filter). - java.util.logging.FileHandler.formatter   - : Formatter class 지정 (defaults to java.util.logging.XMLFormatter) - java.util.logging.FileHandler.encoding  : 캐릭터셋 지정 (defaults to the default platform encoding). - java.util.logging.FileHandler.limit :  하나의 로그파일에 쓸수 있는 최대 로그의 양(바이트기준), 0이면 제한 없음. (defaults to no limit). - java.util.logging.FileHandler.count  :  순환하는 파일의 출력개수 지정. (defaults to 1). - java.util.logging.FileHandler.pattern  : 로그 파일 이름의 패턴 지정 (defaults to “%h/java%u.log”). - java.util.logging.FileHandler.append  :FileHandler를 다른 존재하는 파일에 추가(append)할것인지 설정. (defaults to false)
그 밖에도 `ErrorHandler`, `SocketHandler` 등이 있으니 그건 JavaDoc을 참고하면 될것 같다.  [http://docs.oracle.com/javase/6/docs/api/java/util/logging/package-summary.html](http://docs.oracle.com/javase/6/docs/api/java/util/logging/package-summary.html) **ConsoleHandler** – ConsoleHandler 로그를 System.err 로 내보내는 역할을 하고 기본적으로 SimpleFormatter를 사용한다. 
- java.util.logging.ConsoleHandler.level specifies the default level for the Handler (defaults to [Level.INFO](http://level.info/)). - java.util.logging.ConsoleHandler.filter specifies the name of a Filter class to use (defaults to no Filter). - java.util.logging.ConsoleHandler.formatter specifies the name of a Formatter class to use (defaults to java.util.logging.SimpleFormatter). - java.util.logging.ConsoleHandler.encoding the name of the character set encoding to use (defaults to the default platform encoding)
#2 : `SimpleFormatter` 의 포맷을 지정하는 부분이다.  #3 : ConsoleHandler 의 formatter를 #2에서 지정한  `SimpleFormatter` 로 지정한다.  #4 : ConsoleHandler 의 로그레벨을 INFO로 변경한다.  #5 : FileHandler 의 로그레벨을 INFO로 변경한다.  #6 : FileHandler의 formatter를 `org.vertx.java.core.logging.impl.VertxLoggerFormatter` 로 지정한다.  – `java.util.logging.Formatter` 추상클래스를 상속받는데,  `format()` 함수를 재정의(override) 하고 있다.  – [현재 스레드이름] 시간 로그레벨 [로거이름] 로그메시지  #7 : FileHandler.pattern 을 지정함으로써 경로와 로그파일이름을 지정한다.  #10 : .level 을 INFO로 지정한다.  #11 : org.vertx.level 을 INFO 로 지정한다.  #12 :  com.hazelcast.level=SEVERE로 지정한다. 
#10~12 번은 아직 파악이 되지는 않았지만 유추해보기로는 #11는 vertx 자체의 로그 레벨을 지정하는 것으로 보이고, #12은 hazelcast 내 로그 레벨을 지정하는 것으로 보인다. 
logging.properties 에 대해서 조사해봤는데, 추후에 vert.x 를 이용해서 서버를 만들때에도 로그를 처리하는 부분은 반드시 고려되어야 할 부분이라고 생각한다. 하나의 verticle만 돌아가면 상관이 없지만, 여러개가 돌아가는 상황에서는 어떻게 로그형식을 정하고, 위치와 이름을 정하는 것은 필수적인 일이라는 생각이 든다. 
다음에는 log4j, slf4j를 사용하는 방법에 대해서 알아보도록 하겠다. 

#logging.properties  #vert.x  #vert.x 로그 설정  #vertx logging.properties  #vertx.log