1 通过Spring Boot Actuator 组件
1 修改yml配置文件
management:
endpoints:
web:
exposure:
include: 'loggers'
2 添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
3 查看全局所有定义的日志级别
输入地址:http://localhost:8888/actuator/loggers

4 修改指定日志级别(注意参数)

5 修改前后对比(注意参数)
修改前:http://localhost:8888/actuator/loggers/ROOT

c.y.e.m.c.QueryController.getSkuInfo 测试info级别数据日志
修改后:

[DEBUG 2019-10-10 16:45:12.726][295553873287841793][http-nio-8888-exec-8] c.y.e.m.c.QueryController.getSkuInfo 测试DEBUG级别数据日志
[INFO 2019-10-10 16:45:12.727][295553873287841793][http-nio-8888-exec-8] c.y.e.m.c.QueryController.getSkuInfo 测试info级别数据日志
注: 如有按照包名配置的话,URL为:http://localhost:8888/actuator/loggers/包名类名全路径 (com.xxx) 在http://localhost:8888/actuator/loggers 可查看到的可以修改。
通过springboot admin修改
1 pom设置(注意版本):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2 yaml配置
我这里是客户端和服务端我在一起的。
anagement:
endpoints:
web:
exposure:
include: "*"
spring:
boot:
admin:
client:
url: http://127.0.0.1:8888
instance:
service-base-url: http://127.0.0.1:8888/
profiles:
active: dev
3 启动类配置:增加@EnableAdminServer
@SpringBootApplication
@EnableAdminServer
public class EasyGoMiddlewareApplication {
private final static Logger logger = LoggerFactory.getLogger(EasyGoMiddlewareApplication.class);
public static void main(String[] args) {
/**
* org.apache.logging.slf4j.Log4jLoggerFactory
*/
try {
SpringApplication.run(EasyGoMiddlewareApplication.class, args);
logger.info("数据同步应用启动成功!");
} catch (Exception e) {
e.printStackTrace();
logger.error("数据同步-启动异常,e=", e);
}
}
}
4 效果
地址栏输入:http://127.0.0.1:8888/

[DEBUG 2019-10-11 19:44:05.787][295655724684412929][http-nio-8888-exec-10] c.y.e.m.c.QueryController.getSkuInfo 测试DEBUG级别数据日志
[INFO 2019-10-11 19:44:05.787][295655724684412929][http-nio-8888-exec-10] c.y.e.m.c.QueryController.getSkuInfo 测试info级别数据日志
5 与swagger2使用注意
http://localhost:8888/swagger-ui.html
按照上面配置后,swagger2就原先的地址就无法访问啦。 需处理下资源访问路径:
@Configuration
public class SpringConfig extends WebMvcConfigurerAdapter {
@Bean
public TraceInterceptor traceInterceptor(){
return new TraceInterceptor();
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/templates/**.js").addResourceLocations("classpath:/templates/");
registry.addResourceHandler("/templates/**.css").addResourceLocations("classpath:/templates/");
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(traceInterceptor()).addPathPatterns("/**");
}
这样配置后,就可以直接访问啦。
3 通过slf4j相关扩展api修改(适用任何框架)
我们项目用的是log4j2,我只展示log4j2的demo,其他日志框架log4j、logback同理。
也可以参考美团这个,比较全面点。
pom引入:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.1</version>
<scope>compile</scope>
</dependency>
/**
* 动态修改log4j2日志框架级别
* @return
*/
public String updateLog4j2Level(String motifyLevel){
Level level = Level.toLevel(motifyLevel);
LoggerContext context = (LoggerContext) LogManager.getContext(false);
Configuration configuration = context.getConfiguration();
for (Map.Entry<String, LoggerConfig> entry : configuration.getLoggers().entrySet()) {
if (entry.getValue().getLevel().intLevel() != level.intLevel()) {
entry.getValue().setLevel(level);
}
}
configuration.getLoggerConfig("ROOT").setLevel(level);
context.updateLoggers(configuration);
return "sucess";
}
这个可自行扩展,可以到logger packge级别的。而不是全局的。自行扩展。