Spring Boot:如何使用application.properties设置日志记录级别?

zeo*_*dtr 267 logging spring-boot

这是一个非常简单的问题,但我找不到相关信息.
(也许我对Java框架的了解非常严重)

如何使用application.properties设置日志记录级别?
并记录文件位置等?

M. *_*num 313

更新:从Spring Boot v1.2.0.RELEASE开始,设置application.propertiesapplication.yml应用.请参阅参考指南的" 日志级别"部分.

logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR
Run Code Online (Sandbox Code Playgroud)

对于早期版本的Spring Boot,你不能.您只需为日志框架(log4j,logback)使用正常配置即可.将适当的配置文件(log4j.xmllogback.xml)添加到src/main/resources目录并根据自己的喜好进行配置.

您可以通过指定--debug从命令行启动应用程序时启用调试日志记录.

Spring Boot为logback提供了一个很好的起点,可以配置一些默认值,着色等base.xml文件,您可以将其简单地包含在logback.xml文件中.(这也是Spring Boot中默认的logback.xml的推荐.

<include resource="org/springframework/boot/logging/logback/base.xml"/>     
Run Code Online (Sandbox Code Playgroud)

  • 通常,您可以在命令行上执行的任何操作都在外部配置文件中.所以debug = true会这样做我想.该标志有点特殊,因为日志必须很早就初始化,但我认为这样可行. (8认同)
  • BTW首选的日志记录系统是logback,这是默认情况下从起始poms获得的.因此,logback.xml是以细粒度方式配置日志记录的最常用工具.--debug标志只是打开一些选定的Spring日志记录通道. (7认同)
  • 现在看来我们可以.对于Spring v4.1.3.RELEASE(使用Spring Boot v1.2.0.RELEASE),`application.properties`或`application.yml`中的设置确实适用,正如Richard所解释的那样(以`:`或`=`为模)问题---冒号似乎对我有用). (2认同)

Ric*_*ard 101

您可以使用application.properties执行此操作.

logging.level.=ERROR- >设置根日志记录级别错误
...
logging.level.=DEBUG- >设置根日志记录级别为DEBUG

logging.file=${java.io.tmpdir}/myapp.log- >设置绝对日志文件路径TMPDIR/myapp.log

关于使用配置文件会记录application.properties的理智默认设置: application.properties:

spring.application.name=<your app name here>
logging.level.=ERROR
logging.file=${java.io.tmpdir}/${spring.application.name}.log
Run Code Online (Sandbox Code Playgroud)

application-dev.properties:

logging.level.=DEBUG
logging.file=
Run Code Online (Sandbox Code Playgroud)

当您在自己喜欢的IDE内部开发时,只需-Dspring.profiles.active=dev在应用程序的运行/调试配置中添加一个VM参数即可.

这将使您在开发期间仅记录生产和调试日志记录时出错,而无需将输出写入日志文件.这将改善开发期间的性能(并节省SSD驱动器的运行时间;)).

  • 在我看来,“logging.level.”只是“logging.level.root”的一个方便的语法快捷方式,它可能是首选,因为(1)不太容易与拼写错误混淆,(2)可能更明确,并且( 3) 使用`=`赋值符号,这为配置文件提供了更多的整体一致性。 (3认同)
  • 奇怪的是,我在一个示例项目中使用此设置.除了在键中使用分隔符的情况之外,''(空格),'='和':'符号同样被视为分隔符.你确定你的钥匙没有任何空格吗? (2认同)

The*_*ger 55

设置日志记录级别的正确方法是使用该属性logging.level.root.请参阅自最初询问此问题以来已更新的文档.

例:

logging.level.root=WARN
Run Code Online (Sandbox Code Playgroud)


Pan*_*kos 25

根据文档,您可以根据 java 包拥有不同的日志记录级别

 logging.level.com.mypackage.myproject=WARN
 logging.level.org.springframework=DEBUG
 logging.level.root=INFO 
Run Code Online (Sandbox Code Playgroud)

这意味着

  • 对于您的自定义包,将应用com.mypackage.myproject WARN日志记录级别
  • 对于 spring 框架包org.springframework DEBUG日志记录级别将被应用
  • 对于每个其他包,将应用INFO日志记录级别

您还可以将不同的 java 包组合在一起,并指示系统在一行中对该组的所有包使用相同的日志记录级别。

在前面的例子中你可以这样做

 logging.level.root=INFO 
 logging.level.org.springframework=DEBUG
 
 logging.group.myCustomGroup = com.mypackage.myproject, com.otherpackage.otherproject, com.newpackage.newproject
 logging.level.myCustomGroup=WARN
Run Code Online (Sandbox Code Playgroud)

这意味着包

  • com.mypackage.myproject
  • com.otherpackage.otherproject
  • com.newpackage.newproject

都会应用日志记录级别WARN


sha*_*999 15

假设您的应用程序包名为com.company.myproject.然后,您可以在application.properties文件中为项目内部的类设置日志记录级别

logging.level.com.company.myproject = DEBUG

logging.level.org.springframework.web = DEBUG并将logging.level.org.hibernate = DEBUG仅为Spring框架Web和Hibernate的类设置日志记录级别.

用于设置日志文件位置的使用

logging.file = /home/ubuntu/myproject.log


Har*_*tel 11

如果您使用的是Spring Boot,则可以直接在application.properties文件中添加以下属性,以设置日志记录级别,自定义日志记录模式以及将日志存储在外部文件中.

这些是不同的日志记录级别及其从最小值<<最大值的顺序.

OFF << FATAL << ERROR << WARN << INFO << DEBUG << TRACE << ALL

# To set logs level as per your need.
logging.level.org.springframework = debug
logging.level.tech.hardik = trace

# To store logs to external file
# Here use strictly forward "/" slash for both Windows, Linux or any other os, otherwise, its won't work.      
logging.file=D:/spring_app_log_file.log

# To customize logging pattern.
logging.pattern.file= "%d{yyyy-MM-dd HH:mm:ss} - %msg%n"
Run Code Online (Sandbox Code Playgroud)

请通过此链接更加生动地自定义您的日志.

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html


ora*_*ecz 10

确保Dave Syer提示得到一些爱,因为添加debug=true到application.properties确实会启用调试日志记录.


小智 10

logging:
  level:
    root: INFO
    com.mycompany.myapp: DEBUG
Run Code Online (Sandbox Code Playgroud)


atr*_*pes 8

如果您想使用不同的日志框架,例如log4j,我发现最简单的方法是禁用spring boots自己的日志记录并实现自己的日志记录.这样我就可以在一个文件中配置每个loglevel,log4j.xml(在我的例子中)就是这样.

要实现这一点,您只需将这些行添加到您的pom.xml:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

您可能已经拥有第一个依赖项,只需要另外两个.请注意,此示例仅涵盖log4j.
这就是全部,现在你已经准备好在log4j配置文件中配置启动日志!


小智 6

使用 Springboot 2,您可以使用环境变量设置根日志记录级别,如下所示:

logging.level.root=DEBUG
Run Code Online (Sandbox Code Playgroud)

或者您可以为这样的包设置特定的日志记录:

logging.level.my.package.name=TRACE
Run Code Online (Sandbox Code Playgroud)

  • 对于环境变量配置,您宁愿使用: `LOGGING_LEVEL_ROOT=DEBUG` ,使用驼峰式语法 (2认同)

Abh*_*k K 6

我们还可以通过命令行打开调试日志,如下所示:-

java -jar <jar file> --debug
Run Code Online (Sandbox Code Playgroud)


Mar*_*ine 5

现有的答案很棒。我只想与您分享一个新的 Spring Boot 功能,允许对日志进行分组并在整个组上设置日志记录级别。

文档中的示例:

  • 创建日志记录组
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
Run Code Online (Sandbox Code Playgroud)
  • 设置组的日志记录级别
logging.level.tomcat=TRACE
Run Code Online (Sandbox Code Playgroud)

这是一个很好的功能,可以带来更多的灵活性。


Ahm*_*lem 5

您可以尝试将日志级别设置为 DEBUG 它会在启动应用程序时显示所有内容

logging.level.root=DEBUG
Run Code Online (Sandbox Code Playgroud)