在Spring Boot应用程序中的运行时更改日志记录级别

时间:2018-11-06 06:08:42

标签: spring-boot spring-security

我正在尝试在Spring Boot应用程序的运行时更改日志记录级别(从DEBUG到ERROR或WARN)。代码如下。

我关注了以下帖子,但仍未发布更改日志记录级别的请求。请在下面查找请求,应用程序无响应,我在日志中也看不到任何错误。

how do I change log level in runtime without restarting spring boot application

https://docs.spring.io/spring-boot/docs/1.5.1.RELEASE/reference/htmlsingle/#production-ready-logger-configuration

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <artifactId>spring-boot-web-spring-security</artifactId>
    <packaging>jar</packaging>
    <name>Spring Boot Web Spring Security</name>
    <description>Spring Boot Web Spring Security Example</description>
    <url>https://www.mkyong.com</url>
    <version>1.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.3.RELEASE</version>
    </parent>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
        <!-- Spring Security -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-springsecurity4</artifactId>
        </dependency>

        <!-- hot swapping, disable cache for template, enable live reload -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

        <!-- Optional, for bootstrap -->
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap</artifactId>
            <version>3.3.7</version>
        </dependency>

    </dependencies>
    <build>
        <plugins>
            <!-- Package as an executable jar/war -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

控制器类

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;



@Controller
public class DefaultController {

    Logger logger = LoggerFactory.getLogger(DefaultController.class);

    @GetMapping("/")
    public String home1() {
        logger.info("returning default /");
        return "/home";
    }

    @GetMapping("/home")
    public String home() {
        logger.debug("returning home");
        return "/home";
    }

    @GetMapping("/admin")
    public String admin() {
        logger.warn("returning admin");
        return "/admin";
    }

    @GetMapping("/user")
    public String user() {
        logger.error("returning user");
        return "/user";
    }

    @GetMapping("/about")
    public String about() {
        logger.trace("returning about");
        return "/about";
    }

    @GetMapping("/login")
    public String login() {
        logger.warn("returning login");
        return "/login";
    }

    @GetMapping("/403")
    public String error403() {
        return "/error/403";
    }

}

SpringSecurityConfig

  protected void configure(HttpSecurity http) throws Exception {

        http.csrf().disable()
        .authorizeRequests()
                .antMatchers("/", "/home", "/about","/proxy/**","/app/**","/admin/**","/loggers/**","/loggers/de.springbootbuch/**",
                        "/loggers/de.springbootbuch/").permitAll()
                .anyRequest().authenticated()
                .antMatchers("/admin/").hasAnyRole("ADMIN")
                .antMatchers("/user/**").hasAnyRole("USER")
                //.antMatchers("/admin/**").hasAnyRole("ADMIN")
                .and()
                .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
                .logout()
                .permitAll()
                .and()
                .exceptionHandling().accessDeniedHandler(accessDeniedHandler);  
    }

Application.properties 该文件是否有待解决

logging.level.org.springframework.security=ERROR
logging.level.com.test=DEBUG
management.security.enabled=false

已发送以更改日志记录级别的请求

 curl -X "POST" "http://localhost:8080/loggers/de.springbootbuch"      -H "Content-Type: application/json; charset=utf-8"      -d $'{
  "configuredLevel": "WARN"
}'

curl -X "POST" "http://localhost:8080/loggers/de.springbootbuch"      -H "Content-Type: application/json; charset=utf-8"      -d $'{
  "configuredLevel": "ERROR"
}'

2 个答案:

答案 0 :(得分:1)

您可以使用弹簧启动执行器的loggers端点来更改所需类的日志记录级别。 在spring-boot 1.5中,您可以使用:

`curl -X "POST" "http://localhost:8080/loggers/<class or package name>" -H "Content- 
Type: application/json; charset=utf-8" -d $'{
"configuredLevel": "ERROR"
}'`

从弹簧启动执行器端点开始,必须以actuator为前缀。

答案 1 :(得分:0)

如评论中建议的那样,更改请求,如下所示:

curl -X "POST" "http://localhost:8080/loggers/com.test.controller"      -H "Content-Type: application/json; charset=utf-8"      -d $'{
  "configuredLevel": "ERROR"
}'