【问题标题】:How to set logging.path for spring-boot apps?如何为 spring-boot 应用程序设置 logging.path?
【发布时间】:2017-04-16 06:38:47
【问题描述】:
spring-boot 提供了几个logging.* 设置,可以在application.properties 中应用,例如:
logging.level.=DEBUG
logging.file=myfile.log
logging.path=d:/logs/
问题:myfile.log 已生成,但在类路径中!为什么 spring 不考虑我的绝对路径?
【问题讨论】:
-
查看我的回答here。对于更高版本的 Spring Boot,接受的答案已经过时。
标签:
java
spring
spring-boot
【解决方案1】:
Spring Boot documentation 状态
默认情况下,Spring Boot 只会登录到控制台,不会
写日志文件。如果你想写日志文件除了
控制台输出你需要设置一个 logging.file 或 logging.path 属性
(例如在您的 application.properties 中)。
然后描述logging.file 和logging.path 属性如何工作。你应该只设置一个。
如果设置了logging.file,它将写入该特定文件。文档说明
名称可以是确切的位置,也可以是相对于当前目录的位置。
因此,您可能会写入当前目录,该目录恰好与您的类路径相同。
如果你设置logging.path,Spring Boot
将spring.log 写入指定目录。名称可以是准确的位置,也可以是相对于当前目录的位置。
检查您的当前目录是否不是您的类路径,如果您不希望它们混合,并相应地调整logging.file 和logging.path 之一。
【解决方案2】:
我不知道这是否仍然需要,但您可以根据您的示例使用以下代码设置绝对路径
logging.path=D:\logs\logfile.txt
您可以像这样更改文件名和路径。如果该文件夹不存在,则会创建它。在 Windows 上,您必须使用 \ 作为分隔符,而在 Linux 和 Mac 上,您需要 / 作为分隔符。
请记住:您的属性中不能同时包含 logging.file 和 logging.path。它是 .file 或 .path ...在您的情况下是路径。
发布前 2 分钟测试
【解决方案3】:
对于 Spring boot v2.3.4 及以上版本:
它是 NOT logging.file=.... ,
它是 logging.file.name=....
【解决方案4】:
您也可以在您的app.properties 上进行此配置。这就是它在我的一个项目中的工作方式。
logging.path=../logs
logging.file=${logging.path}/fileName.log
因此,您可以同时拥有两个属性,并且一个引用另一个。
【解决方案5】:
spring-boot 2.3.x 及以上版本:
logging:
level:
root: INFO
my.app: INFO
file:
path: './logs/${spring.application.name}'
name: ${logging.file.path}/my-app.log
logging.file.name :日志文件名(例如,myapp.log)。名称可以是确切的位置,也可以是相对于当前目录的位置。
logging.file.path:日志文件的位置。例如,/var/log。
参考:Spring-Boot Core Properties
【解决方案6】:
我在application.properties 中设置了logging.file=C:/usr/local/tomcat/logs/hib.log,并在课堂上设置如下
private static final Logger logger = LogManager.getLogger(ChargeMasterController.class);
logger.info("Total time taken for is ---------------------------" + time + " ms");
日志在作为 logging.file 提到的路径中打印得很好。
现在我想在 2 个不同的文件中为 2 个不同的类(在同一个包中)打印我的日志,如何在 application.properties 中设置 2 个 logging.file