代码之家  ›  专栏  ›  技术社区  ›  greengreyblue

在spring启动应用程序的运行时更改日志记录级别

  •  1
  • greengreyblue  · 技术社区  · 7 年前

    我正在尝试在spring启动应用程序的运行时更改日志记录级别(从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);  
        }
    

    应用程序属性 , 关于这个文件有什么要做的吗

    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 回复  |  直到 7 年前
        1
  •  3
  •   Sukhpal Singh    7 年前

    你可以使用弹簧启动执行器的 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开始,端点需要加前缀 actuator .

        2
  •  0
  •   greengreyblue    7 年前

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

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