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

标签 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>

Controller 类
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"
}'

最佳答案

您可以使用 spring-boot 执行器的 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"
}'`

从 spring-boot 执行器端点需要以 actuator 为前缀.

关于spring-boot - 在 Spring Boot 应用程序中在运行时更改日志记录级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53166572/

相关文章:

java - 登录后 Spring Security 的重定向不正确

Spring 安全。每页显示用户名

spring - Spring Boot Web应用-重定向 Controller

mysql - Json响应与数据库数据不匹配

java - 使用 Spring LDAP 在 Java 中进行身份验证

filter - SpringSecurity 无需在 web.xml 中定义过滤器部分

java - Spring MVC Hibernate Spring Security 错误

REST api 的 Spring security 在身份验证失败时显示浏览器弹出窗口

java - spring boot包不存在错误

java - Bean 在测试期间不使用测试资源