logging system에서 최근 많이 적용하는 것으로 logback 인듯 합니다.

장단점, 활용방법은 관련 홈페이지 참고하면 될듯합니다.

 

logback 홈페이지 : http://logback.qos.ch/documentation.html

 

설정파일에서 많이 적용하는 팁만 간단히 정리합니다.

 

1. 일자별로 로그파일 적용하기

 

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
   <!-- daily rollover -->
   <fileNamePattern>/logs/log_file_name.%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>

 

2. 일자별 로그파일구성외에도 로그파일의 크기가 너무 커지는 것을 방지하기 위한 옵션

 

<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    <!-- or whenever the file size reaches 50MB -->
    <maxFileSize>50MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>

 

3. 일자별 백업파일의 보관기간을 얼마로 정할것인가에 대한 옵션

 

<maxHistory>30</maxHistory>

 

4. 로그파일 경로 등에 대해서 변수로 지정하기

 

<property name="LOG_DIR" value="/home/project/logs" />
<property name="LOG_PATH_NAME" value="${LOG_DIR}/stdout.log" />

 

5. 특정 패키지 부분만 별도의 로그파일로 빼고자 하는 경우

 

<logger name="com.test.groupware" level="DEBUG">
  <appender-ref ref="LOG_FILE_2" />
</logger>

 

위의 옵션을 적용한 전체 모습은 아래와 같습니다.

 

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds" debug="true">

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
     <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender> 

 

<property name="LOG_DIR" value="/home/project/logs" />
<property name="LOG_PATH_NAME" value="${LOG_DIR}/stdout.log" />

<property name="GW_LOG_PATH_NAME" value="${LOG_DIR}/stdout_gw.log" /> 

 

<appender name="LOG_FILE_1" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>${LOG_PATH_NAME}</file>
  <append>true</append>
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
   <!-- daily rollover -->
   <fileNamePattern>${LOG_PATH_NAME}.%d{yyyy-MM-dd}.log</fileNamePattern>
   <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    <!-- or whenever the file size reaches 50MB -->
    <maxFileSize>50MB</maxFileSize>
   </timeBasedFileNamingAndTriggeringPolicy>
   <!-- keep 30 days' worth of history -->
   <maxHistory>30</maxHistory>
  </rollingPolicy>
  <encoder>
   <pattern>%d{HH:mm:ss.SSS} %-6level %logger{35} - %msg%n</pattern>
  </encoder>
 </appender>
 
 <appender name="LOG_FILE_2" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>${GW_LOG_PATH_NAME}</file>
  <append>true</append>
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
   <!-- daily rollover -->
   <fileNamePattern>${GW_LOG_PATH_NAME}.%d{yyyy-MM-dd}.log</fileNamePattern>
   <timeBasedFileNamingAndTriggeringPolicy  class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    <!-- or whenever the file size reaches 50MB -->
    <maxFileSize>50MB</maxFileSize>
   </timeBasedFileNamingAndTriggeringPolicy>
   <!-- keep 30 days' worth of history -->
   <maxHistory>30</maxHistory>
  </rollingPolicy>
  <encoder>
   <pattern>%d{HH:mm:ss.SSS} %-6level %logger{35} - %msg%n</pattern>
  </encoder>
 </appender>
 
 <logger name="com.test.groupware" level="DEBUG">
    <appender-ref ref="LOG_FILE_2" />
 </logger>

 

 <root level="DEBUG">
   <appender-ref ref="STDOUT" />

   <appender-ref ref="LOG_FILE_1" />
 </root>

</configuration>

 

 비슷한 방법으로 로그레벨별로 파일을 분리하고자 할때도 응용하면 될듯합니다.