![](/img/trans.png)
[英]Can I move Spring Boot logging settings out of application.properties file and into an untracked file?
[英]Spring Boot: How can I set the logging level with application.properties?
這是一個非常簡單的問題,但我找不到信息。
(也許我對 Java 框架的了解嚴重缺乏)
如何使用 application.properties 設置日志記錄級別?
和日志文件位置等?
更新:從 Spring Boot v1.2.0.RELEASE 開始, application.properties
或application.yml
的設置確實適用。 請參閱參考指南的日志級別部分。
logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR
對於早期版本的 Spring Boot,您不能。 為此,您只需使用日志框架(log4j、logback)的正常配置。 將適當的配置文件( log4j.xml
或logback.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 驅動器的運行時間;))。
如果您使用的是 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 = DEBUG
和logging.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/ROOT或http://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日志記錄級別將被應用org.springframework
將應用DEBUG日志記錄級別您還可以將不同的 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
這意味着包
都會應用日志級別WARN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.