[英]Java: Spring boot Tomcat Access Logs are not created at Tomcat Start
[英]Tomcat Access Logs in Spring Boot for different operating systems
最近,我開始使用Spring Boot並遇到以下問題:
我們有不同的環境(例如階段,開發,生產),並且所有環境都可以在Windows或Linux上運行。 因此,我創建了application-stage.properties,application-prod.properties,application-devl.properties來指定諸如數據庫連接之類的內容,因為它與操作系統無關(Windows和Linux相同)。
現在,我想為嵌入式Tomcat服務器啟用訪問日志。 因此,按照各種指南,我在application.properties
文件中使用了以下內容:
server.tomcat.accesslog.directory=logs
server.tomcat.accesslog.enabled=true
我被迫指定一個相對路徑,因為我們同時使用linux和Windows,但是我希望根據OS在不同的位置創建訪問日志。 例如,我們將日志存儲在Windows下的c:\\<product>\\logs
而在Linux中,我們使用/var/log/<product>/...
對於普通日志,我們使用logbacks,並且它允許類似這樣的事情,但是由於訪問日志實際上不是由logback驅動的,而是使用Valves,因此我的問題是: 在這里如何實現相同級別的靈活性?
我認為我不應該為此提供其他配置文件並像這樣使用它:
--spring.profiles.active=windows / linux
因為我相信彈簧靴對此有一些解決方法:)提前謝謝
這是我想出的解決方案。 也許會幫助某人。
有2個步驟。
步驟1我已經在src/main/resources
創建了application-windows.properties
和application-linux.properties
文件。 這些文件包含與操作系統有關的配置。
例如,在Linux中,我指定了以下內容:
server.tomcat.accesslog.directory=/var/log/access_logs
對於Windows,它可以是(例如):
server.tomcat.accesslog.directory=C:\\Temp\\access_logs
第2步
Spring Boot應用程序(帶有main方法的文件)通常如下所示:
// maybe some additional annotations
@SpringBootApplication
public class MySpringBootApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(..., args);
}
}
第25.2段中的spring boot 文檔指出,可以以編程方式添加配置文件,因此我對主類進行了少許更改以允許以編程方式添加:
// maybe some additional annotations
@SpringBootApplication
public class MySpringBootApplication {
public static void main(String[] args) throws Exception {
SpringApplication myApp = new SpringApplication(...);
myApp.setAdditionalProfiles(getOSName());
myApp.run(args);
}
private static String getOSName() {
String os = System.getProperty("os.name");
if (os.toLowerCase().contains("win")) {
return "windows";
}
else {
return "linux";
}
}
}
就是這樣,現在不需要在--spring.profiles.active
屬性中指定配置文件了(我通常使用它來指定環境,例如暫存,生產等。這一點是spring將自動加載相關屬性文件現在。
感謝所有提出解決方案的人!
我最喜歡的解決方案是在Tomcat中使用其他類路徑,並從那里加載特定於環境的屬性。
即conf / catalina.properties中的Tomcat的'common.loader'屬性
另外,我通常將默認屬性保留在.war文件中,這樣,您將僅指定特定於環境的屬性之間的差異。
如果相對路徑不好,您將必須執行某種特定於env的操作。 在https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html中,您可以使用配置文件,也可以使用環境變量或系統屬性。 正如另一個答案所說,如果最適合您,則可以從特定於環境的文件中加載屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.