2017-02-02 16 views
0

我有一個在C4-Large EC2實例上運行的彈簧啓動應用程序,由於具體要求,我們需要更改最大尺寸根據需要記錄文件<maxFileSize>10MB</maxFileSize>,無需重新啓動Spring Boot應用程序。目前,logback-spring.xml位於資源文件夾下,並在啓動應用程序時加載。用新的<maxFileSize></ maxFileSize>重新加載logback-spring.xml而不重新啓動彈簧啓動應用程序

+0

Atleast在logback-spring.xml中是不可能的 – rajadilipkolli

+0

@rajadilipkolli這是可能的,檢查我的答案:) – Shek

+0

這個工作,但我們需要部署代碼與此變化。他的要求是重新啓動他想要改變大小的應用程序。 – rajadilipkolli

回答

0

如果可能,我建議不要在這種情況下使用日誌擴展(即使用logback.xml而不是logback-spring.xml),as it does not support configuration scanning

在外部位置使用正logback.xml文件(而不是JAR文件中),可以使用-Dlogback.configurationFile=/path/to/config.xml指定,你應該能夠利用的logback的configuration scanning,例如: <configuration scan="true" scanPeriod="30 seconds">的。

這樣,您可以在不重新啓動應用程序的情況下反映logback.xml的變化(例如更新的最大文件大小)。

+0

我無法在生產中單獨加載logback,現在正在查看mbeans,感謝您的付出。 – Shek

0

後好幾次嘗試,我能夠實現objective-

<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 
       <maxFileSize>${xyz.log.fsize}</maxFileSize> 

這裏${xyz.log.fsize}系統屬性,所以爲了重新加載的logback-spring.xml,無需重新啓動彈簧啓動應用程序,我創建了一個郵政電話 -

@PostMapping("/changeSize/{size}") 
     public void fsize(@PathVariable("size") String size, HttpServletResponse response) { 

      try { 
       System.setProperty("xyz.log.fsize", size); 
       LOG.info("Change in file size is observed reloading the loggers with the latest configs..."); 
       InputStream logConfStream = MQConsumerController.class.getResourceAsStream(File.separator 
         + LOGBACK_SPRING_XML); 
       String logConfString = CharStreams.toString(new InputStreamReader(logConfStream)); 
       LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); 
       JoranConfigurator configurator = new JoranConfigurator(); 
       configurator.setContext(context); 
       context.reset(); 
       configurator.doConfigure(new ByteArrayInputStream(logConfString.getBytes())); 
       LOG.info("file size updated to -> {}", size); 
       response.setStatus(HttpServletResponse.SC_OK); 
      } catch (Exception e) { 
       LOG.error("Error while changing the logs file size {}", e); 
       response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 
      } 

     } 

現在,當你啓動應用程序與VM參數啓動-Dxyz.log.fsize=10MB

一旦應用程序啓動和運行,使通話後 -

http://localhost:8080/changeSize/100MB 

,瞧!您的logback-spring.xml即時重新加載,無需啓動應用程序。

相關問題