繁体   English   中英

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

[英]Spring Boot: How can I set the logging level with application.properties?

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

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

更新:从 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"/>     

您可以使用您的 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

应用程序-dev.properties:

logging.level.=DEBUG
logging.file=

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

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

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

示例:

logging.level.root=WARN

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

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

OFF << 致命 << 错误 << 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"

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

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

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

logging.level.com.company.myproject = DEBUG

logging.level.org.springframework.web = DEBUGlogging.level.org.hibernate = DEBUG将只为 Spring 框架 web 和 Hibernate 的类设置日志级别。

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

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

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

如果您想使用不同的日志记录框架,例如 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 配置文件中配置启动日志了!

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

logging.level.root=DEBUG

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

logging.level.my.package.name=TRACE

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

logging.level.root=DEBUG

记录: 官方文档,对于 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”属性设置配置文件的位置。

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

{
  "configuredLevel": "WARN"
}

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

文档中的示例:

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

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

如果你想设置更多细节,请添加一个日志配置文件名“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>

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

logging:
  level:
    ROOT: TRACE

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

logging:
  level:
    root: INFO
    com.mycompany.myapp: DEBUG

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

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

java -jar <jar file> --debug

根据文档,您可以根据 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM