如何在Spring Boot属性文件中使用时间戳?

3

我希望在日志文件名中使用重启时间戳,我能否以某种方式在属性文件中获取它?

当前实现:

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

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

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

其他实现方式有:

  1. 使用系统属性LOG_FILE并设置具有时间戳的文件名
  2. 使用logback-spring.xml文件,按照这个答案中的方式进行操作。

但在属性文件中实现这一点是我认为比较好的方法。Spring boot版本2.6.5


2
除非您有名为时间戳的环境属性,否则无法这样做。PID存在作为环境变量。您还有其他类型的Java变量和特定于Windows / Linux操作系统的变量。另一种选择是使用文件名模式进行滚动策略。在这种情况下,您可以使用%d {yyy-MM-dd},但只有“滚动”的文件才具有此模式。但最好的方法可能是像您在问题中所拥有的那样使用日志配置文件。 - pringi
2个回答

0

我更喜欢使用您在问题中提到的标准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环境/容器中运行,它应该有一个存储启动时间的环境变量。我们可以使用该时间戳来定义文件名中的时间戳。


你的第一种方法与我在问题中提供的相同,而第二种方法具有构建时间,我需要的是应用程序重新启动时间。因此,到目前为止,总体上它并不是问题的答案。 - Vipin
更新问题,附带重启时间。 - Vipin

-1
这里的意图可能是使用一个适当的FileNamePattern,并使用此处所述的logback.xml

1
我在问题中特别提到了这种修复方式,链接也给出了,以防有人想看如何实现,感谢您的关注,但是这个答案也是问题的一部分。 - Vipin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接