Please Enable JavaScript!
Gon[ Enable JavaScript ]

log4j 서버 재 기동없이 load 되어 적용될수 있게 하자

자바(JAVA)
반응형
서버를 시작한 상태에서 properties 파일을 수정하게 되면 서버를 재기동 해야되는 불편한 점이 있다.
이것을 해소하기 위해 PropertyConfiguration 에서는 시간과 파일을 넘겨주면  정해진 시간간격마다
재로딩을 하게 된다.

이것을 셋팅하는 클래스를 하나 만들고 그 클래스를 web.xml 에 설정해서 값을 넘겨주면 된다.
아래 로직을 보게 되면 getServletContext().getRealPath("/") 함수로 context 루트 local 주소를가져온다.
가져온주소와 properties 위치와 파일명을 PropertyConfigurator.configureAndWatch 함수에 전달한다.
config.getInitParameter("log4j-init-file"); 같은 설정값들은 web.xml 에 설정된값을 읽어들인것인데
PropertyConfigurator.configureAndWatch 시간값도 같이 넘기면 그 시간간격마다 properties 를
읽어들이게 된다.

public class Log4jReloadConfigure extends HttpServlet {
 
 private Logger log = Logger.getLogger(this.getClass());
 
 public void init(ServletConfig config) throws ServletException{
  /** 상위클래스 servlet 초기화 함수실행*/
  super.init(config);
 
  log.debug("Log4jReloadConfigure - init start ");
  /**
   * 시간간격을 두고 재로딩할수 있도록 설정하는데 그 값은 web.xml 에서 읽어온다.
   * context 하드웨어 local 경로를 알아와서 properties 가 들어있는 절대 경로를 셋팅한다.
   */
  StringBuffer prefix = new StringBuffer();
  prefix.append(getServletContext().getRealPath("/")).append(File.separatorChar);
  prefix.append("WEB-INF").append(File.separatorChar);
  prefix.append("classes").append(File.separatorChar);
 
  String file = config.getInitParameter("log4j-init-file");
  prefix.append(file);
 
  /** xml 에 log4j-init-file 설정값이 있는지와 실제로 경로에 파일이있는지여부체크 */
  if (file == null || file.length() == 0 || !(new File(prefix.toString()).isFile())){
   log.debug("[ERROR] File not fount log4j.properties or log4j.xml");
   throw new ServletException();
  }
 
  /** log4j load time 을 설정한다 */
  String watch = config.getInitParameter("watch");
  String timewatch = config.getInitParameter("time-watch");
 
  if (watch != null && watch.equalsIgnoreCase("true")){
   if (timewatch != null){
    PropertyConfigurator.configureAndWatch(prefix.toString(), Long.parseLong(timewatch));
   }else{
    PropertyConfigurator.configureAndWatch(prefix.toString());
   }
  }else{
   PropertyConfigurator.configureAndWatch(prefix.toString());
  }
 }
 
 public void destory(){
  super.destroy();
 }
}

web.xml 설정값
<!-- log4j 자동로그 시간설정값  -->
 <servlet>
  <servlet-name>log4j-init</servlet-name>
  <servlet-class>
   common.Log4jReloadConfigure
  </servlet-class>
  <init-param>
   <param-name>log4j-init-file</param-name>
   <param-value>log4j.properties</param-value>
  </init-param>
  <init-param>
   <param-name>watch</param-name>
   <param-value>true</param-value>
  </init-param>
  <init-param>
   <param-name>time-watch</param-name>
   <param-value>1000</param-value>
  </init-param>
  <load-on-startup>3</load-on-startup>
 </servlet>
 
반응형
Posted by 녹두장군1
,