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


300

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

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


1
为了进行记录,另一个选项是例如通过heroku仪表板将日志级别设置为环境变量。在Settings->中Config Vars设置logging.level.com.yourpackage为所需的级别(INFO,ERROR,DEBUG)。
LukeSolar

Answers:


354

更新:从Spring Boot v1.2.0.RELEASE开始,中的设置application.propertiesapplication.yml确实适用。请参阅参考指南的“ 日志级别”部分

logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR

对于早期版本的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"/>     

8
通常,您在命令行上可以执行的任何操作都可以在外部配置文件中进行。所以我认为debug = true可以做到。该标志有点特殊,因为必须非常早地初始化日志记录,但是我认为这会起作用。
Dave Syer 2013年

7
顺便说一句,首选的日志记录系统是logback,这是默认情况下从启动器poms中获得的。因此,logback.xml是最常用的以细粒度方式配置日志记录的工具。--debug标志仅在某些选定的Spring日志记录通道上打开。
Dave Syer

另一个提示,spring boot包含一个不错的base.xml。这是一个不错的起点。(请参阅我的扩展答案)。
M. Deinum 2013年

@ M.Deinum再次感谢您的提示!现在,我可以更改自己代码的日志级别。
zeodtr 2013年

2
看来我们现在可以了。至于Spring v4.1.3.RELEASE(与Spring Boot v1.2.0.RELEASE一起),中的设置application.propertiesapplication.yml确实适用,正如Richard回答的那样(对:or取模(=冒号对我来说似乎有用))。
埃里克·普拉顿

108

您可以使用application.properties来实现。

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

logging.file=${java.io.tmpdir}/myapp.log设置为DEBUG->将绝对日志文件路径设置为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

application-dev.properties:

logging.level.=DEBUG
logging.file=

当您在自己喜欢的IDE中进行开发时,只需将-Dspring.profiles.active=devas VM参数添加到应用程序的运行/调试配置中。

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


1
分配的“ =”符号无效。分配使用':'作为分隔符。 logging.level.:DEBUG
randominstanceOfLivingThing 2014年

2
奇怪,我在示例项目中使用了此设置。除在键中使用分隔符的情况外,'((space),'='和':'符号均视为分隔符。您确定您的钥匙没有空格吗?
理查德

1
可以确认“:”有效,但是“ =”被忽略,编辑:马上说,“ =”和级别之间有一个空格。现在一切正常。
Mike R

1
这在我的测试中不起作用spring-boot 1.4.0logging.level.=DEBUG将导致应用程序无法启动,并出现错误:java.lang.ClassCircularityError: java/util/logging/LogRecord
Eric Wang

2
在我看来,这 logging.level.只是的便利语法捷径logging.level.root,可以首选为(1)不太容易与错字混淆,(2)可能更明确,以及(3)使用=赋值符号,可以提供更大的整体一致性到配置文件。
阿兰·贝克


15

假设您的应用程序的软件包名称为com.company.myproject。然后,您可以按以下application.properties文件中的说明设置项目中类的日志记录级别。

logging.level.com.company.myproject =调试

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

用于设置日志文件位置

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


14

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

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

关闭<<致命<<错误<<警告<<信息<<调试<<跟踪<<所有

# 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"

请通过此链接更生动地自定义日志。

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


我不知道为什么,但是logging.level.tech.hardik =跟踪在我的情况下不起作用,当我将logging.level.roo = trace放在工作时
Arvind Kumar

10

确保Dave Syer技巧引起人们的广泛关注,因为添加debug=true到application.properties确实可以启用调试日志记录。


8

如果您想使用其他日志记录框架,例如log4j,我发现最简单的方法是禁用spring boots自己的日志记录并实现自己的日志记录。这样,我可以在一个文件(即我的情况)中的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>

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


这种排除对我有用。没有选择我的REST Api和log4j依赖项log4j.properties
ankitjaininfo '16

他们现在也有spring-boot-starter-log4j2
Kalpesh Soni

4

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

logging.level.root=DEBUG

3

作为记录:官方文档,关于Spring Boot v1.2.0.RELEASE和Spring v4.1.3.RELEASE:

如果您需要对日志记录进行的唯一更改是设置各种记录器的级别,则可以使用“ logging.level”前缀在application.properties中进行设置,例如

logging.level.org.springframework.web: DEBUG logging.level.org.hibernate: ERROR

您还可以使用“ logging.file”设置文件的位置(除控制台外)以登录。

要配置日志记录系统的更细粒度的设置,您需要使用所讨论的LoggingSystem支持的本机配置格式。默认情况下,Spring Boot从系统的默认位置获取本地配置(例如,用于Logback的classpath:logback.xml),但是您可以使用“ logging.config”属性设置配置文件的位置。


2

如果要设置更多详细信息,请添加日志配置文件名称“ logback.xml”或“ logback-spring.xml”。

在您的application.properties文件中,输入如下内容:

logging.config: classpath:logback-spring.xml

在loback-spring.xml中,输入如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <include resource="org/springframework/boot/logging/logback/base.xml"/>

        <appender name="ROOT_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">

            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>INFO</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>

            <file>sys.log</file>

            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">


                <fileNamePattern>${LOG_DIR}/${SYSTEM_NAME}/system.%d{yyyy-MM-dd}.%i.log</fileNamePattern>

                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>500MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>

            <encoder>
                <pattern>%-20(%d{yyy-MM-dd HH:mm:ss.SSS} [%X{requestId}]) %-5level - %logger{80} - %msg%n
                </pattern>
            </encoder>
        </appender>


        <appender name="BUSINESS_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>TRACE</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>

            <file>business.log</file>

            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

                <fileNamePattern>${LOG_DIR}/${SYSTEM_NAME}/business.%d{yyyy-MM-dd}.%i.log</fileNamePattern>

                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>500MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>

            <encoder>
                <pattern>%-20(%d{yyy-MM-dd HH:mm:ss.SSS} [%X{requestId}]) %-5level - %logger{80} - %msg%n
                </pattern>
            </encoder>
        </appender>


        <logger name="{project-package-name}" level="TRACE">
            <appender-ref ref="BUSINESS_APPENDER" />
        </logger>

        <root level="INFO">
            <appender-ref ref="ROOT_APPENDER" />
        </root>

    </configuration>

2

现有的答案是伟大的。我只想与您分享一个新的spring boot功能,该功能允许对日志进行分组并在整个组上设置日志记录级别。

来自文档的示例:

  • 创建一个日志记录组
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
  • 设置组的日志记录级别
logging.level.tomcat=TRACE

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


2

在我当前的配置中,我在application.yaml中定义了它,如下所示:

logging:
  level:
    ROOT: TRACE

我正在使用spring-boot:2.2.0.RELEASE。您可以定义任何具有TRACE级别的软件包。


1
这是在应用程序级别设置的。OP只希望跟踪休眠日志,因为您需要在日志设置中使用程序包级过滤器进行休眠
Sudip Bhandari

2

在春季启动项目中,我们可以编写logging.level.root = WARN,但是这里的问题是,即使我们添加了devtools依赖项,我们也必须重新启动,如果在属性文件中修改了任何值,将无法自动检测到该值,为此我知道解决方案,即我们可以在pom.xml中添加执行器,并通过记录器级别,如下所示,地址栏为http:// localhost:8080 / loggers / ROOT或 邮递员客户端中所示。 http:// localhost:8080 / loggers / com。我的公司 ,在正文中您可以传递如下的json格式

{
  "configuredLevel": "WARN"
}


1

使用Springboot 2,您可以使用以下环境变量来设置根日志级别:

logging.level.root=DEBUG

或者,您可以为此类软件包设置特定的日志记录:

logging.level.my.package.name=TRACE

对于环境变量配置,您宁愿使用:LOGGING_LEVEL_ROOT=DEBUG和驼峰式语法
Anthony Dahanne
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.