簡體   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