簡體   English   中英

Spring Boot中針對不同操作系統的Tomcat訪問日志

[英]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.propertiesapplication-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM