gpt4 book ai didi

java - Tomcat在Spring Boot中针对不同操作系统访问日志

转载 作者:行者123 更新时间:2023-11-30 02:28:18 27 4
gpt4 key购买 nike

最近我开始使用 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,但是我希望根据操作系统在不同的位置创建访问日志。例如,我们将windows中的日志存储在c:\<product>\logs下在Linux中我们使用/var/log/<product>/...

对于通常的日志,我们使用 logbacks,它允许这样的东西,但由于访问日志实际上不是 logback 驱动的,而是使用 Valve,我的问题是: 我们如何实现相同的目标这里的灵 active 程度?

我认为我不应该为此提供额外的配置文件并像这样使用它:

--spring.profiles.active=windows / linux

因为我相信 Spring Boot 对此有一些解决方案:)提前非常感谢

最佳答案

这是我想出的解决方案。也许这会对某人有所帮助。

有 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);
}
}

documentation Spring Boot 的第 25.2 段指出可以通过编程方式添加配置文件因此,我稍微更改了主类以允许这种编程添加:

// 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会自动加载相关的属性文件。

感谢所有提出解决方案的人!

关于java - Tomcat在Spring Boot中针对不同操作系统访问日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44984808/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com