4

I am trying to change the logging levels (from DEBUG to ERROR or WARN) at runtime in spring boot application. The code is given below.

I have followed the below posts, but still posting the request to change the logging level did not work. Please look below for request and no response from application and I do not see any error in the logs either.

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 class

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, is there something to be done with regard to this file

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

Requests sent to change logging level:

 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"
}'
greengreyblue
  • 389
  • 3
  • 12

2 Answers2

4

You can use spring-boot actuator's loggers endpoint to change logging level of desired class. In spring-boot 1.5, you can use:

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

Starting with spring-boot actuator endpoints need to be prefixed with actuator.

Sukhpal Singh
  • 2,130
  • 9
  • 20
0

As suggested in comment, changing the request like below working

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