需求:通过标记动态改变系统日志级别
实现:请求header添加zuul-log-level:info标记实现改变日志级别
代码:
网关默认日志级别
@Slf4j
@Component
public class MyFilter extends ZuulFilter {
//获取配置日志级别,没有配置为INFO
@Value("${logging.level.com.zhang.service:#{INFO}}")
private String defLevel;
@Override
public String filterType() {
return FilterConstants.PRE_TYPE;
}
@Override
public int filterOrder() {
return 1;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
//日志级别
changeLevel( getCurrentContext().getRequest().getHeader("zuul-log-level"));
//TODO do something
return null;
}
/**
* 路由请求日志级别更改
*
* @param level 日志级别
*/
private void changeLevel(String level) {
if (StringUtils.isEmpty(level)) {
return;
}
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
ch.qos.logback.classic.Logger logger = loggerContext.getLogger("com.zhang.yy");
if (Objects.nonNull(logger) && !level.equalsIgnoreCase(logger.getLevel().toString())) {
logger.setLevel(Level.toLevel(level, Level.toLevel(defLevel)));
}
}
}
postman请求测试