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

这是一个非常简单的问题,但是我找不到信息 (可能我对Java框架的知识严重缺乏)

如何使用application.properties设置日志级别?< br > 日志文件的位置,等等?< / p >
697014 次浏览

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

确保Dave Syer的提示得到一些爱,因为添加debug=true到应用程序。属性确实会启用调试日志记录。

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

logging.level.=ERROR ->设置根日志级别为error

logging.level.=DEBUG ->设置根日志级别为DEBUG

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

一个正常的默认应用程序集。关于使用概要文件进行日志记录的属性如下: application.properties:
< / p >

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

application-dev.properties:

logging.level.=DEBUG
logging.file=

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

这将使您在开发期间只在生产和调试日志中记录错误,而不将输出写入日志文件。这将提高开发期间的性能(并节省SSD驱动器几个小时的操作;))。

如果您想使用不同的日志框架(例如log4j),我发现最简单的方法是禁用spring引导自己的日志记录并实现自己的日志记录。这样我就可以在一个文件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配置文件中为引导配置日志了!< / p >

记录:官方文档,如Spring Boot v1.2.0。RELEASE和Spring v4.1.3 RELEASE:

如果您需要对日志记录所做的唯一更改是设置各种日志记录器的级别,那么您可以在应用程序中这样做。属性。级别”前缀,例如:

< p > logging.level.org.springframework.web: DEBUG logging.level.org.hibernate: ERROR < / p >

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

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

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

loging.level.com.company.myproject = DEBUG

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

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

日志记录。文件= /home/ubuntu/myproject.log

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

如果你想设置更多的细节,请添加一个日志配置文件名“logback.xml”或“logback-spring.xml”。

在你的应用中。属性文件,输入如下:

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>

设置日志级别的正确方法是使用属性logging.level.root。参见文档,自这个问题最初被问到以来,它已经更新了。

例子:

logging.level.root=WARN
如果你在Spring Boot,那么你可以直接在application.properties中添加以下属性文件来设置日志级别, 自定义日志记录模式并将日志存储在外部文件中。< / p >

这些是不同的测井级别及其从最小<<最大值。

& lt; & lt;致命的& lt; & lt;错误& lt; & lt;警告& lt; & lt;信息& lt; & lt;调试& lt; & lt;跟踪& lt; & lt;所有

# 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

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

{
"configuredLevel": "WARN"
}

现有的答案很好。我只是想与您分享一个新的spring引导功能,允许对日志进行分组并在整个组上设置日志级别。

来自文件的例子:

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

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

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

logging:
level:
ROOT: TRACE

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

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

logging.level.root=DEBUG

在Springboot 2中,你可以像这样用环境变量设置根日志级别:

logging.level.root=DEBUG

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

logging.level.my.package.name=TRACE

我们也可以像下面这样通过命令行打开DEBUG日志

java -jar <jar file> --debug
logging:
level:
root: INFO
com.mycompany.myapp: DEBUG

根据文档,可以得到基于Java包的不同日志级别

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

这就意味着

  • 对于您的自定义包com.mypackage.myproject 警告日志级别将被应用
  • 对于spring框架包org.springframework 调试日志级别将被应用
  • 对于每个其他包信息将应用日志级别

您还可以将不同的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

是否都应用了日志级别警告