![](/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.