介绍
给大家推荐一个中小项目使用的神器,SpringBoot的最佳伴侣Plumelog-lite嵌入式日志框架,功能包含,日志查询,链路追踪,日志管理,适合单机小规模项目使用,目前只支持springboot+logback,log4j2组合。微服务项目请看skywalking的讲解。 |
如图所示:
一、特点
(1)、基于log4j、log4j2、logback搜集日志,设置链路ID,方便查询关联日志。
(2)、高吞吐,查询效率高
二、如何何实
1、导入依赖
<dependency>
<groupId>com.plumelog</groupId>
<artifactId>plumelog-lite</artifactId>
<version>3.5.2</version>
</dependency>
或者引用plumelog-lite-spring-boot-starter,则不需要配置扫描路径和静态文件路径
<dependency>
<groupId>com.plumelog</groupId>
<artifactId>plumelog-lite-spring-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
2、配置文件
1、配置logback.xml
<appender name="plumelog" class="com.plumelog.lite.logback.appender.LiteAppender">
<appName>plumelog</appName>
<!-- 日志存储位置 -->
<logPath>/plumelog/lite</logPath>
<!-- 日志保留天数 -->
<keepDay>30</keepDay>
</appender>
<!-- 添加 ref-->
<root level="INFO">
<appender-ref ref="plumelog"/>
</root>
2、扫描配置
在springboot启动类里添加扫描路径,注意:如果原来你的项目没有扫描路径,不要只加这个,也要把你自己的项目的加了,不然只扫描plumelog的路径了
@ComponentScan("com.plumelog")
情况一:如果你的项目访问plumelog页面空白,说明没有配置可以访问静态文件请做如下配置 在application.properties配置:
spring.mvc.static-path-pattern=/**
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
情况二:拦截器会覆盖spring.resources.static-locations,如果项目中有拦截器,需要在拦截器里配置静态文件访问
import com.plumelog.core.PlumeLogTraceIdInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
public class TraceIdInterceptorsConfig extends WebMvcConfigurerAdapter{
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"};
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//就是这句addResourceLocations,加上静态文件访问路径
registry.addResourceHandler("/**").addResourceLocations(CLASSPATH_RESOURCE_LOCATIONS);
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new PlumeLogTraceIdInterceptor());
super.addInterceptors(registry);
}
}
3、链路追踪设置
1、引入依赖
<dependency>
<groupId>com.plumelog</groupId>
<artifactId>plumelog-trace</artifactId>
<version>3.5</version>
</dependency>
2、需要自己的项目引入aop的 (这里默认scope 为 provided)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
<version>2.1.11.RELEASE</version>
<scope>provided</scope>
<!-- scope 为 provided 是为了不与使用者的版本冲突-->
</dependency>
3、手动打点在需要记录的方法上加入@Trace
就可以记录链路日志了
4、默认是开启扫描的,如果你的启动类放在自己的包路径下,要加上如下配置。
@ComponentScan({"com.plumelog","你项目的路径"})使得项目包含com.plumelog
//例子
@ComponentScan(basePackages = {"com.le.**", "com.system.**","com.plumelog"})
5、全局拦截配置链路日志
@Aspect
@Component
public class AspectConfig extends AbstractAspect {
@Around("within(com.xxxx..*))")//这边写自己的包的路径
public Object around(JoinPoint joinPoint) {
return aroundExecute(joinPoint);
}
}
6、如果不想再自己的控制台或者文件输出里看到trace日志可以通过添加过滤器过滤掉,logback的例子如下
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!--此过滤器过滤掉所有的trace日志,3.4.1版本logback自带的过滤类-->
<filter class="com.plumelog.logback.util.FilterSyncLogger">
<level>info</level>
<filterPackage>com.plumelog.trace.aspect.AbstractAspect</filterPackage>
</filter>
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>\
<charset>UTF-8</charset>
</encoder>
</appender>
4、访问日志
启动你的项目:输入你的项目地址+plumelog/#/访问,例如:http://localhost:8083/plumelog/#/ 一定要加这个/#/后缀
5、提示
其他的功能就各位自己去使用熟悉,根据下面的开源地址学习。
plumelog-lite开源地址(https://gitee.com/RemoteControl/plumelog-me/tree/master/plumelog-lite)
有些用3.5版本会报错:org.apache.lucene.store.LockObtainFailedException: Lock held by this virtual machine
情况一
:springcloud-alibaba需要在你的启动类里面加:System.setProperty(“spring.cloud.bootstrap.enabled”, “false”);
示例:
public static void main(String[] args) {
System.setProperty("spring.cloud.bootstrap.enabled", "false");
SpringApplication.run(LogServerStart.class, args);
}
情况二:如果用的logback.xml 改成logback-spring.xml;
情况三:用3.5.1以后版本-项目不是根目录导致,滚动日志无法连接
总结
以上就是今天要讲的内容,本文简单介绍了plumelog-lite
的使用,更加有效率的使用日志来解决问题,希望能帮助到大家。