How to change root logging level programmatically for logback

前端 未结 7 1299
猫巷女王i
猫巷女王i 2020-11-29 16:58

I have the following logback.xml file:

 

          


        
7条回答
  •  爱一瞬间的悲伤
    2020-11-29 17:19

    Here's a controller

    @RestController
    @RequestMapping("/loggers")
    public class LoggerConfigController {
    
    private final static org.slf4j.Logger LOGGER = LoggerFactory.getLogger(PetController.class);
    
    @GetMapping()
    public List getAllLoggers() throws CoreException {
        
        LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
        
        List loggers = loggerContext.getLoggerList();
        
        List loggerDtos = new ArrayList<>();
        
        for (Logger logger : loggers) {
            
            if (Objects.isNull(logger.getLevel())) {
                continue;
            }
            
            LoggerDto dto = new LoggerDto(logger.getName(), logger.getLevel().levelStr);
            loggerDtos.add(dto);
        }
        
        if (LOGGER.isDebugEnabled()) {
            LOGGER.debug("All loggers retrieved. Total of {} loggers found", loggerDtos.size());
        }
        
        return loggerDtos;
    }
    
    @PutMapping
    public boolean updateLoggerLevel(
            @RequestParam String name, 
            @RequestParam String level
    )throws CoreException {
        
        LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
        
        Logger logger = loggerContext.getLogger(name);
        
        if (Objects.nonNull(logger) && StringUtils.isNotBlank(level)) {
            
            switch (level) {
                case "INFO":
                    logger.setLevel(Level.INFO);
                    LOGGER.info("Logger [{}] updated to [{}]", name, level);
                    break;
                    
                case "DEBUG":
                    logger.setLevel(Level.DEBUG);
                    LOGGER.info("Logger [{}] updated to [{}]", name, level);
                    break;
                    
                case "ALL":
                    logger.setLevel(Level.ALL);
                    LOGGER.info("Logger [{}] updated to [{}]", name, level);
                    break;
                    
                case "OFF":
                default: 
                    logger.setLevel(Level.OFF);
                    LOGGER.info("Logger [{}] updated to [{}]", name, level);
            }
        }
        
        return true;
    }
    

    }

提交回复
热议问题