我有一個在C4-Large EC2實例上運行的彈簧啓動應用程序,由於具體要求,我們需要更改最大尺寸根據需要記錄文件<maxFileSize>10MB</maxFileSize>
,無需重新啓動Spring Boot應用程序。目前,logback-spring.xml位於資源文件夾下,並在啓動應用程序時加載。用新的<maxFileSize></ maxFileSize>重新加載logback-spring.xml而不重新啓動彈簧啓動應用程序
回答
如果可能,我建議不要在這種情況下使用日誌擴展(即使用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的變化(例如更新的最大文件大小)。
我無法在生產中單獨加載logback,現在正在查看mbeans,感謝您的付出。 – Shek
後好幾次嘗試,我能夠實現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即時重新加載,無需啓動應用程序。
- 1. 重新加載Vaadin UI而不重新啓動應用程序
- 2. 彈簧重新加載屬性,無需重新啓動TOMCAT
- 3. 重新部署彈簧引導服務而不重新啓動?
- 4. [Android]應用程序重新啓動設備後重新啓動
- 5. 將重新啓動應用程序重新啓動前面
- 6. 自動更新位置而不重新啓動應用程序
- 7. 重新啓動應用程序而無需重新啓動服務器?
- 8. 更新Android應用程序而不重新啓動設備
- 9. 重新啓動/重放Java遊戲而不重新啓動GUI
- 10. 重新啓動我的應用程序
- 11. 在重新啓動應用程序時重新啓動Android活動
- 12. Tomcat AccessLogValve模式重新加載而不重新啓動
- 13. 重新加載docset而不重新啓動Xcode
- 14. 什麼時候重新啓動,而不是重新加載Nginx?
- 15. 重新加載配置而不重新啓動Emacs
- 16. 重新加載Freeradius客戶端而不重新啓動服務
- 17. 重新加載Camel.xml而不重新啓動ActiveMQ
- 18. 如何讓Firefox重新加載user_pref而不重新啓動
- 19. 啓動Firefox而不重新啓動
- 20. 的Android的WebView的WebView中應用程序重新啓動,而不是重新
- 21. 避免重新啓動應用程序
- 22. Sideview重新啓動Android應用程序
- 23. 重新啓動iPhone應用程序
- 24. Netbeans - 應用程序重新啓動
- 25. action_image_capture重新啓動應用程序
- 26. 應用程序何時重新啓動?
- 27. iPhone應用程序重新啓動?
- 28. Android - backbutton - 重新啓動應用程序
- 29. 重新啓動Java Swing應用程序
- 30. TTNavigator重新啓動應用程序內
Atleast在logback-spring.xml中是不可能的 – rajadilipkolli
@rajadilipkolli這是可能的,檢查我的答案:) – Shek
這個工作,但我們需要部署代碼與此變化。他的要求是重新啓動他想要改變大小的應用程序。 – rajadilipkolli