java - 如何在 spring boot 属性文件中使用时间戳?

标签 java spring-boot spring-logback

我想在日志文件名中使用重启时间戳,我可以通过某种方式在属性文件中获取它吗?

当前实现:

logging.file.name=abc_services-${PID}.log

类似下面的内容应该会有所帮助:

logging.file.name=abc_services-${PID}-${timestamp}.log

其他实现方式有:

  1. 使用系统属性 LOG_FILE 并设置具有时间戳的文件名
  2. 使用 logback-spring.xml 文件并使用此 answer 中说明的方式.

但在属性文件中实现这一点是我发现的好方法。 Spring Boot 版本 2.6.5

最佳答案

我更喜欢您在问题中提到的标准 spring logback xml 机制。

我尝试使用来自 https://start.spring.io/ 的最新演示 spring web 项目进行跟踪

  1. 我关注了Add Timestamp Variable to Folder Path Value in Application Properties . 在启动时,我设置时间戳并在属性中访问相同的时间戳。但这将修复文件名,直到服务器重新启动。

示例文件名:abc_services-52855-1648696549862.log

我如下设置时间戳变量。我们可以根据需要控制格式,环境变量有多种设置方式。

@SpringBootApplication
public class DemoApplication {

public static void main(String[] args) {
    System.setProperty("timestamp",String.valueOf(System.currentTimeMillis()));

    SpringApplication.run(DemoApplication.class, args);
    }
}
  1. 我们可以使用 maven 构建时间戳而不是生成客户时间戳

    logging.file.name=abc_services-${PID}-@maven.build.timestamp@.log

  2. 如果应用程序在 Docker/Cloud 环境/Container 中运行,它应该有一个环境变量来存储启动时间。我们可以使用该时间戳来定义文件名中的时间戳

关于java - 如何在 spring boot 属性文件中使用时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71203947/

相关文章:

java - 向现有 Web 服务添加额外方法

java - 仅加热 URI,不等待 Spring Rest 中的响应

java - Spring Boot 应用程序在 Kubernetes 扩展时崩溃

java - 如何在 Tomcat 中设置服务器日志位置

java - 在进一步处理之前验证 JSON

java - 如果它包含美元符号 (${var}),则无法读取属性

spring - 以编程方式控制 @RestController 可用性

java - spring-boot 创建 logging.path_IS_UNDEFINED.log 文件

spring-boot - Spring Boot应用-如何打印Json格式的日志

java - 为什么for语句后面加分号会导致编译错误?