388

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

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

4

18 回答 18

432

更新:从 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"/>     
于 2013-12-10T07:14:28.837 回答
120

您可以使用您的 application.properties 来做到这一点。

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

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

关于使用配置文件进行日志记录的合理的默认 application.properties 集将是:应用程序属性:

spring.application.name=<your app name here>
logging.level.=ERROR
logging.file=${java.io.tmpdir}/${spring.application.name}.log

应用程序-dev.properties:

logging.level.=DEBUG
logging.file=

当您在您最喜欢的 IDE 中进行开发时,您只需-Dspring.profiles.active=dev在应用程序的运行/调试配置中添加一个 as VM 参数。

这将使您仅在开发过程中登录生产和调试日志时出错,而不会将输出写入日志文件。这将提高开发过程中的性能(并为 SSD 驱动器节省几个小时的运行时间;))。

于 2014-08-02T09:24:58.023 回答
80

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

例子:

logging.level.root=WARN
于 2017-05-16T19:09:23.037 回答
26

如果您使用的是 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

于 2018-02-18T17:16:03.870 回答
21

假设您的应用程序的包名称为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

于 2016-07-15T17:28:07.610 回答
13

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

于 2014-07-09T23:51:20.327 回答
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 配置文件中配置启动日志了!

于 2014-12-05T10:35:32.783 回答
7

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

logging.level.root=DEBUG

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

logging.level.my.package.name=TRACE
于 2020-05-20T10:52:13.720 回答
5

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

logging.level.root=DEBUG
于 2019-12-21T11:32:00.843 回答
4

备案:官方文档,关于 Spring Boot v1.2.0.RELEASE 和 Spring v4.1.3.RELEASE:

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

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

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

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

于 2014-12-17T00:29:47.090 回答
3

如果您想设置更多细节,请添加日志配置文件名称“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>
于 2017-05-11T06:06:33.367 回答
3

在 Spring Boot 项目中我们可以编写 logging.level.root=WARN 但这里的问题是,即使我们添加了 devtools 依赖项,我们也必须重新启动,在属性文件中,如果我们被修改,任何值都不会自动检测,因为我知道了这个限制解决方案 i,e 我们可以在 pom.xml 中添加执行器并传递记录器级别,如下所示在邮递员客户端中的 URL 栏中http://localhost:8080/loggers/ROOThttp://localhost:8080/loggers/com .mycompany 并在正文中您可以传递 json 格式,如下所示

{
  "configuredLevel": "WARN"
}
于 2019-05-06T12:36:13.377 回答
3

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

文档中的示例:

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

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

于 2019-07-23T07:45:21.260 回答
3
logging:
  level:
    root: INFO
    com.mycompany.myapp: DEBUG
于 2021-05-12T14:24:22.497 回答
2

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

logging:
  level:
    ROOT: TRACE

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

于 2019-12-05T09:47:02.793 回答
2

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

java -jar <jar file> --debug
于 2021-03-09T09:57:17.617 回答
1

如果使用 Eclipse IDE 并且您的项目是 maven,请记住清理并构建项目以反映更改。

于 2017-01-11T10:06:22.713 回答
0

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

 logging.level.com.mypackage.myproject=WARN
 logging.level.org.springframework=DEBUG
 logging.level.root=INFO 

这将意味着

  • 对于您的自定义包,将应用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

这意味着包

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

都会应用日志级别WARN

于 2021-12-11T17:32:57.610 回答